某种程度上说,属性动画是增强版的补间动画,属性动画的强大可提现在如下两方面
- 属性动画可以定义任何属性变化
- 补间动画只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否在屏幕上)
它有如下几方面属性
持续时间
|
默认300毫秒,通过android:duration指定
|
动画插值方式 |
通过android:interpolator指定
|
动画重复次数
|
通过android:repeatCount指定
|
重复行为
|
指定动画播放结束后,重复下次动画时,是从开始帧开始播放还是逆序播放,android:repeatMode
|
动画集
|
可将多个属性动画合并成一组,既可让这组属性动画按次序播放,也可让这组属性动画同事播放。通过<set.../>元素来组合,android:ordering指定该组动画是按次序播放还是同时播放
|
帧刷新频率
|
指定每隔多长时间播放一帧,默认为10ms
|
属性动画的API
- Animator
- ValueAnimator 属性动画的主要时间引擎,它负责计算各个帧的属性值。它定义了属性动画的绝大部分核心功能,包括计算各帧的相关属性值,负责处理更新事件,按属性值的类型控制计算规则。
- ObjectAnimator 它是ValueAnimator的子类,允许程序员对指定对象的属性执行动画。
- AnimatorSet 它是Animator的子类,用于组合多个Animator,并指定多个Animator是按次序播放,还是同时播放
属性动画由两方面组成:
- 计算各帧的相关属性值
- 为指定对象设置这些计算后的值
ValueAnimator只负责第一方面的内容
实际应用时ObjectAnimator使用起来更简单,也就更常用
除此之外,属性动画还需要利用一个Evaluator,该工具类控制属性动画如何计算属性值
- IntEvaluator
- FloatEvaluator
- ArgbEvaluator
- TypeEvaluator
使用ValueAnimator动画可按如下4个步骤:
- 调用ValueAnimator的ofInt()、ofFloat()或ofObject静态方法创建ValueAnimator
- 调用ValueAnimator的setXxx()设置动画的持续时间、插值方式、重复次数等
- 为ValueAnimator注册AnimatorUpdateListener监听器,在该监听器中可以监听ValueAnimator计算出来的值的改变
ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();
使用ObjectAnimator创建动画时,因为ObjectAnimator继承了ValueAnimator,因此它可以直接将ValueAnimator在动画过程中计算出来的值应用到指定对象上,无需注册AnimatorUpdateListener监听器
ObjectAnimator animation = ObjectAnimator.ofFloat(foo, “alpha”,0f, 1f);
animation.setDuration(1000);
animation.start();
使用ObjectAnimator时需要注意的是:
- 要为该对象的属性提供setter方法
- 如果调用ObjectAnimator的ofInt()、ofFloat()或ofObject()工厂方法时values...参数只提供了一个值,那么该参数会被认为是结束值。那么该对象应该为该属性提供一个getter方法,该getter方法的返回值将被作为开始值
- 如果动画对象是View,为了能显示动画效果,可能还需要在onAnimationUpdate()事件监听方法中调用View.invalidate()方法来刷新屏幕显示