一:逐帧动画

1.AnimationDrawable与逐帧动画

定义逐帧动画:只要在animation-list中使用item添加动画的帧,并指定每帧的时间即可。

<animation-list>
     <item android:drawable="@drawable/image01" android:duration="60"></item>
     <item android:drawable="@drawable/image02" android:duration="60"></item>
     <item android:drawable="@drawable/image03" android:duration="60"></item>
</animation-list>

AnimationDrawable代表的动画不是默认播放的,它提供了两个方法来启动和停止动画。

start(),stop();

一般用法为:

final AnimationDrawable drawable = (AnimationDrawable)imageView.getBackground();
drawable.start();




二:补间动画(Tween动画)

1.补间动画只需要设置起始和结束以及中间的关键帧,其余帧由系统来完成。

2.Android使用Animation来表示抽象的动画类,它包括以下几个子类。

(1).AlphaAnimation:透明度动画(value[0,1])。创建该动画需要指定动画开始时的透明度,结束时的透明度和动画持续时间。

(2).ScaleAnimation:大小缩放的动画。创建该动画需要指定动画开始时的缩放比(以x,y轴的缩放参数来表示),结束时的缩放比,缩放中心点(pivotX,pivotY),并指定动画持续时间。

(3).TranslateAnimation:位移变化动画,创建该动画时只要指定开始位置(x,y),结束位置,并指定动画持续时间。

(4).RotateAnimation:旋转动画,创建该动画只要指定动画开始时的旋转角度,结束时的旋转角度,旋转中心点(pivotX,pivotY,并指定动画持续时间即可。

Interpolator可以设置动画的快慢变化。

可以通过xml或者java直接创建的两种方式创建补间动画。

xml:创建anim文件夹,在文件夹中创建动画资源,在java代码中通过AnimationUtils.loadAnimation(context,R.anim.xxx);来得到动画。

Java:类似于TranslateAnimation anim = new TranslateAnimation(curx,nextx,cury,nexty);anim.setDuration(200);

也可以通过set建立多个连续动画,并且动画也可以设置监听。

但是补间动画只是在表面上做了动画,而且动画比较局限,所以在很多情况下并不是很实用。

三:属性动画

1.属性动画API:

==Animator:它提供了创建属性动画的基类,通常被继承使用。

==ValueAnimator:负责计算各帧的属性值。它定义了属性动画的绝大部分核心功能,包括计算各帧的属性值。

==ObjectAnimator:它是ValueAnimator的子类,允许程序员对指定对象的属性执行动画。很常用。

==AnimationSet:他是animator的子类,用于组合多个Animator,并指定顺序(可同时播放),play().before()等。

2.属性动画还需要利用一个Evaluator(计算器),该工具类控制如何计算属性值。

IntEvalutor:用于计算int类型属性值得计算器。

FloatEvalutor:用于计算float类型属性值得计算器。

ArgbEvalutor:用于计算以十六机制表示的颜色值得计算器。

TypeEvalutor:他是计算其接口,开发者可以实现该接口来实现自定义计算器,需要除了上面的以外属性可能需要继承该接口。

3.使用ValueAnimator创建动画:

(1).调动ValueAnimator的ofFloat(),ofInt()或者ofObject()静态方法创建ValueAnimator。

(2).调用ValueAnimator的setXXX来设置动画持续时间,差值方式,重复次数等。

(3).调用ValueAnimator的start()方法启动动画。

(4).为其注册AnimatorUpdateListener监听器,在该监听器中可以监听ValueAnimator计算出来的值得改变,并将这些值应用到指定对象。

4.使用ObjectAnimato创建动画

ObjectAnimator anim = ObjectAnimator.ofFloat(foo,"alpha",0f,1f);
anim.setDuration(1000);
anim.start();