Android动画

动画分为两类:

补间动画(Tween)和帧动画(Frame),补间动画是又一帧经过透明度、旋转、位移等变化而来。而帧动画则是由一帧帧连接起来的。

补间动画主要有一下几种类:

AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation 

AnimationSet 是前面几种补间动画的组合

补间动画的应用:

1定义:两种方式,一种是在XML文件里面定义,另一种是直接用代码创建

① 用XML文件定义

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

    android:duration="1000"

    android:fillAfter="true"

    android:fillEnabled="true"

    android:fromXDelta="0"

    android:fromYDelta="0"

    android:interpolator="@android:anim/linear_interpolator"

    android:repeatCount="2"

    android:repeatMode="reverse"

    android:toXDelta="100"

android:toYDelta="200" />

 

引用定义好的补间动画:

TranslateAnimation ta = (TranslateAnimation) (AnimationUtils

.loadAnimation(Activity1.this,

R.anim.anim1_1));

//iv是一个ImageView对象

iv.setAnimation(ta);

ta.start();

② 直接用代码创建:

// 起始x坐标,结束x坐标,起始y坐标,结束y坐标

TranslateAnimation ta = new TranslateAnimation(0f,

-100f, 0f, 200f);

ta.setDuration(2000);// 设置动画持续时间

ta.setRepeatMode(Animation.REVERSE);// 设置动画的重播模式

ta.setRepeatCount(2);// 设置动画的重播次数

ta.setFillEnabled(true);// 设置动画的填充模式,动画播放结束后停留的位置

ta.setFillAfter(true);// 设置动画播放结束后停留在结束位置

ta.setInterpolator(Activity_main.allInterpolator[0]);// 设置动画的播放速度

iv.setAnimation(ta);

ta.start();

动画播放速度效果主要有一下类型:

Interpolator[] allInterpolator = new Interpolator[] {

new AccelerateInterpolator(), // 0越来越快

new DecelerateInterpolator(),// 1越来越慢

new AccelerateDecelerateInterpolator(),// 2先快后慢

new AnticipateInterpolator(),// 3先后退一小步然后向前加速

new OvershootInterpolator(),// 4快速到达终点超出一小步然后回到终点

new BounceInterpolator(),// 5到达终点产生弹球效果,弹几下再回来

new LinearInterpolator() // 6均匀速度

};

其它几种类型的补间动画和上述一种差不多,介绍一下AnimationSet这类混合的补间动画

①XML文件定义:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/accelerate_interpolator"

    android:shareInterpolator="true" >

 

    <scale

        android:duration="2000"

        android:fromXScale="0"

        android:fromYScale="0"

        android:pivotX="50%"

        android:pivotY="50%"

        android:toXScale="1.0"

        android:toYScale="1.0" />

 

    <alpha

        android:duration="2000"

        android:fromAlpha="0"

        android:toAlpha="1.0" />

 

    <rotate

        android:duration="2000"

        android:fromDegrees="0"

        android:pivotX="50%"

        android:pivotY="50%"

        android:toDegrees="360" />

 

</set>

② 代码生成:

RotateAnimation ta = new RotateAnimation(0f, 2160f,

50f, 50f);

ta.setDuration(2000);

ScaleAnimation sa = new ScaleAnimation(0f, 4f, 0f,

4f, 50f, 50f);

sa.setDuration(2000);

AlphaAnimation aa = new AlphaAnimation(0f, 1f);

aa.setDuration(2000);

// AnimationSet 里面的 动画是否统一使用

// AnimationSet的Interpolator

AnimationSet as = new AnimationSet(true);

as.setInterpolator(Activity_main.allInterpolator[5]);

as.setFillEnabled(true);

as.setFillAfter(true);

as.setDuration(2000);

as.addAnimation(ta);

as.addAnimation(sa);

as.addAnimation(aa);

iv.setAnimation(as);

as.start();

帧动画:

XML定义

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="true" >

 

    <item

        android:drawable="@drawable/a1"

        android:duration="80"/>

   

    <item

        android:drawable="@drawable/a3"

        android:duration="80"/>

    <item

        android:drawable="@drawable/a4"

        android:duration="80"/>

    <item

        android:drawable="@drawable/a5"

        android:duration="80"/>

    

</animation-list>

帧动画的播放:

AnimationDrawable ad;

 

// 从xml获得一个帧动画

ad = (AnimationDrawable) getResources().getDrawable(

R.drawable.drawable_anim);

// 设置是否不重复播放

ad.setOneShot(true);

// 设置控件的背景drawable

iv.setBackgroundDrawable(ad);

// 启动动画

ad.start();

设置Activity启动时候的动画

startActivity(new Intent(Activity_main.this, Activity1.class));

//这一句话一定要紧随其后

overridePendingTransition(R.anim.anim1_0, R.anim.anim1_0);

posted on 2015-10-09 21:14  Jasonxcj  阅读(141)  评论(0编辑  收藏  举报

导航