Android的图形与图像处理之五 属性动画

时间:2022-11-08 11:03:14
某种程度上说,属性动画是增强版的补间动画,属性动画的强大可提现在如下两方面
  • 属性动画可以定义任何属性变化
  • 补间动画只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否在屏幕上)
它有如下几方面属性
持续时间 默认300毫秒,通过android:duration指定
动画插值方式 通过android:interpolator指定
动画重复次数 通过android:repeatCount指定
重复行为 指定动画播放结束后,重复下次动画时,是从开始帧开始播放还是逆序播放,android:repeatMode
动画集 可将多个属性动画合并成一组,既可让这组属性动画按次序播放,也可让这组属性动画同事播放。通过<set.../>元素来组合,android:ordering指定该组动画是按次序播放还是同时播放
帧刷新频率 指定每隔多长时间播放一帧,默认为10ms


属性动画的API
  • Animator
  • ValueAnimator 属性动画的主要时间引擎,它负责计算各个帧的属性值。它定义了属性动画的绝大部分核心功能,包括计算各帧的相关属性值,负责处理更新事件,按属性值的类型控制计算规则。
  • ObjectAnimator  它是ValueAnimator的子类,允许程序员对指定对象的属性执行动画。
  • AnimatorSet  它是Animator的子类,用于组合多个Animator,并指定多个Animator是按次序播放,还是同时播放
属性动画由两方面组成:
  1. 计算各帧的相关属性值
  2. 为指定对象设置这些计算后的值
ValueAnimator只负责第一方面的内容 实际应用时ObjectAnimator使用起来更简单,也就更常用 除此之外,属性动画还需要利用一个Evaluator,该工具类控制属性动画如何计算属性值
  • IntEvaluator
  • FloatEvaluator
  • ArgbEvaluator
  • TypeEvaluator
使用ValueAnimator动画可按如下4个步骤:
  1. 调用ValueAnimator的ofInt()、ofFloat()或ofObject静态方法创建ValueAnimator
  2. 调用ValueAnimator的setXxx()设置动画的持续时间、插值方式、重复次数等
  3. 为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()方法来刷新屏幕显示