
3.3.3 插值器和估值器
前面在介绍补间动画与属性动画时都提到了插值器,属性动画还提到了估值器,因为插值器和估值器是相互关联的,所以放在本小节一起介绍。
插值器用来控制属性值的变化速率,也可以理解为动画播放的速度,默认是先加速再减速(AccelerateDecelerateInterpolator)。若要给动画播放指定某种速率形式(比如匀速播放),调用setInterpolator方法设置对应的插值器实现类即可,无论是补间动画、集合动画、属性动画还是属性动画组合,都可以设置插值器。插值器实现类的说明见表3-3。
表3-3 插值器实现类的说明

估值器专用于属性动画,主要描述该属性的数值变化要采用什么单位,比如整数类型的渐变数值要取整,颜色的渐变数值为ARGB格式的颜色对象,矩形的渐变数值为Rect对象等。要给属性动画设置估值器,调用属性动画对象的setEvaluator方法即可。估值器实现类的说明见表3-4。
表3-4 估值器实现类的说明

一般情况下,无须单独设置属性动画的估值器,使用系统默认的估值器即可。如果属性类型不是int、float、argb三种,只能通过ofObject方法构造属性动画对象,就必须指定该属性的估值器,否则系统不知道如何计算渐变属性值。为方便记忆属性动画的构造方法与估值器的关联关系,表3-5列出了两者之间的对应关系。
表3-5 属性类型与估值器的对应关系

下面是在属性动画中运用插值器和估值器的示例代码:
(完整代码见animation\src\main\java\com\example\animation\InterpolatorActivity.java)



插值器和估值器的演示效果如图3-26和图3-27所示。图3-26为文字变大时的画面,图3-27为文字变小时的画面。此处采用的是震荡插值器,由于截图无法准确反映震荡的动画效果,因此建议读者自己运行和测试该App,这样会有更直观的感受。

图3-26 震荡插值器开始播放

图3-27 震荡插值器即将结束