一起Talk Android吧(第四百八十一回:视图动画中的插值器)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百八十一回:视图动画中的插值器)相关的知识,希望对你有一定的参考价值。

文章目录


各位看官们大家好,上一回中咱们说的例子是"用代码实现视图动画",这一回中咱们说的例子是" 视图动画中的插值器"。闲话休提,言归正转,让我们一起Talk android吧!

概念介绍

插值器也叫加速器,主要用来控制动画的播放速度。比如我们有一个由小变大的缩放动画,在刚开始播放动画时慢慢变大,然后突然就变成最大了,让人感觉整个过程不是线性的,或者说变化的过程不是匀速的,这时就需要通过插值器来控制动画的播放速度。

使用方法

插值器可能通过xml来实现,也可以通过代码来实现,具体的示例如下:
//xml实现

android:interpolator="@android:interpolator/bounce"

这里使用了interpolator属性,它是Animation类的共同属性,各种类型的视图动画都可以使用该属性。属性值是系统提供的,我们可以选择其中一种来使用。代码中的bounce就是其中的一种插值器,我们稍后会介绍它的功能。

//代码实现
animation.setInterpolator(new AnticipateOvershootInterpolator());

代码中使用Animation类的公有方法:setInterpolator()来给动画类对象添加插值器,该方法的参数是插值器类型的对象,该对象的功能,我们稍后介绍。

插值器类型

依据插值器的功能,可以将它们分为以下几种类型:

  1. 控制动画速度
    匀速:LinearInterpolator
    注释: * An interpolator where the rate of change is constant
    前慢后快:AccelerateInterpolator
    注释:it starts even slower and ends evens faster)
    前快后慢:DecelerateInterpolator
    注释:An interpolator where the rate of change starts out quickly and and then decelerates.
    前后慢,中间快AccelerateDecelerateInterpolator
    注释:An interpolator where the rate of change starts and ends slowly but accelerates through the middle.

这里的XXXInterpolator就是类的名称,我们可以直接new一个该类型的对象来使用。中文内容是我自己实践的结果,注释的内容来自于是代码,打开类所在的文件就可以看来这样的注释,从注释中也可以明白插值器的功能。
2. 弹跳效果
在动画结束的地方有弹跳效果:BounceInterpolator.
这个效果对于平移类动画比较明显,缩放和渐变会有反复缩放和渐变的效果.旋转类动画变会有改变旋转方向的效果。BounceInterpolator是类的名称,对应xml中的bounce属性值,我们在示例代码中使用过该属性值。

  1. 反向效果
    AnticipateInterpolator
    开始做动画的反向效果,然后开始动画,反向效果表示缩放,移动,渐变,旋转与动画中的效果相反,比如动画中的缩放是变小,它会先变大然后再变小;
    OvershootInterpolator
    结束时做动画反向效果,然后结束动画,反向效果表示缩放,移动,渐变,旋转与动画中的效果相反,比如动画中的缩放是变小,它会先变小然后再变大,最后结束动画;
    AnticipateOvershootInterpolator 开始和结束时做反向效果,该效果是上两种动画效果的综合。

经验总结

插值器不是动画必须的内容,没有插值器时动画也可以正常播放。如果想控制动画的播放速度,那么需要使用插值器。
插值器有两种实现方法,我建议它和动画实现方法保持一致,比如动画使用代码实现,那么插值器也使用代码实现,这样有助于管理代码。

目前,我们只能使用系统提供的插值器,无法自己创建插值器。注意:插值器控制的是动画的播放速度,duration属性控制的是动画的播放时长,这两个概念很容易混淆,不过duration属性会影响插值器。

看官们,关于"视图动画中的插值器"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第四百八十一回:视图动画中的插值器)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百八十八回:ObjectAnimator)

一起Talk Android吧(第四百八十六回:值动画:ValueAnimator)

一起Talk Android吧(第四百八十九回:如何使用代码实现ObjectAnimator)

一起Talk Android吧(第四百八十回:用代码实现视图动画)

一起Talk Android吧(第四百八十回:用代码实现视图动画)

一起Talk Android吧(第四百八十二回:如何修改Switch的长宽