属性动画插值器Interpolator

属性动画可以设置插值器,其实就是速度设置器。填入不同的 Interpolator ,动画就会以不同的速度模型来执行。

AccelerateDecelerateInterpolator

先加速再减速。这是默认的 Interpolator,也就是说如果你不设置的话,那么动画将会使用这个 Interpolator。

这个是一种最符合现实中物体运动的 Interpolator,它的动画效果看起来就像是物体从速度为 0 开始逐渐加速,然后再逐渐减速直到 0 的运动。它的速度 / 时间曲线以及动画完成度 / 时间曲线都是一条正弦 / 余弦曲线

LinearInterpolator

匀速

AccelerateInterpolator

持续加速。

DecelerateInterpolator

持续减速直到 0。

AnticipateInterpolator

先回拉一下再进行正常动画轨迹,比如弹弓的整个发射过程

OvershootInterpolator

动画会超过目标值一些,然后再弹回来,像是蹦床的效果

AnticipateOvershootInterpolator

这个是前两个的结合,像是弹弓发射到蹦床上被反弹回来

BounceInterpolator

在目标值处弹跳。有点像玻璃球掉在地板上的效果。

CycleInterpolator

这个不太好描述,它和 AccelerateDecelerateInterpolator 的区别是,它可以自定义曲线的周期,所以动画可以不到终点就结束,也可以到达终点后回弹,回弹的次数由曲线的周期决定,曲线的周期由 CycleInterpolator() 构造方法的参数决定。可以将参数设置为0.5f和2f分别看一下效果。

PathInterpolator

自定义动画完成度 / 时间完成度曲线。

用这个 Interpolator 你可以定制出任何你想要的速度模型。定制的方式是使用一个 Path 对象来绘制出你要的动画完成度 / 时间完成度曲线。例如:

Path interpolatorPath = new Path();

...

// 匀速
interpolatorPath.lineTo(1, 1);  

再例如

Path interpolatorPath = new Path();

...

// 先以「动画完成度 : 时间完成度 = 1 : 1」的速度匀速运行 25%
interpolatorPath.lineTo(0.25f, 0.25f);  
// 然后瞬间跳跃到 150% 的动画完成度
interpolatorPath.moveTo(0.25f, 1.5f);  
// 再匀速倒车,返回到目标点
interpolatorPath.lineTo(1, 1);  

不过要注意,这条 Path 描述的其实是一个 y = f(x) (0 ≤ x ≤ 1) (y 为动画完成度,x 为时间完成度)的曲线,所以同一段时间完成度上不能有两段不同的动画完成度(因为内容不能出现分身术),而且每一个时间完成度的点上都必须要有对应的动画完成度(因为内容不能在某段时间段内消失)。

也就是说,x与y是一一对应的点,动画执行过程中,注意是过程中,不能出现x对应两个y,也不能出现x无对应值,否则会导致程序FC

除了上面的这些,Android 5.0 (API 21)引入了三个新的 Interpolator 模型,并把它们加入了 support v4 包中。这三个新的 Interpolator 每个都和之前的某个已有的 Interpolator 规则相似,只有略微的区别。

FastOutLinearInInterpolator

加速运动

这个 Interpolator 的作用你不能看它的名字,一会儿 fast 一会儿 linear 的,完全看不懂。其实它和 AccelerateInterpolator 一样,都是一个持续加速的运动路线。只不过 FastOutLinearInInterpolator 的曲线公式是用的贝塞尔曲线,而 AccelerateInterpolator 用的是指数曲线。具体来说,它俩最主要的区别是 FastOutLinearInInterpolator 的初始阶段加速度比 AccelerateInterpolator 要快一些。

也就是说,这个效果对于计算机来说会更加平滑一些,不过从肉眼来看几乎看不出区别。

AccelerateDecelerateInterpolator

FastOutSlowInInterpolator 的前期加速更猛一些,后期的减速过程的也减得更迅速。用更直观一点的表达就是,AccelerateDecelerateInterpolator 像是物体的自我移动,而 FastOutSlowInInterpolator 则看起来像有一股强大的外力「推」着它加速,在接近目标值之后又「拽」着它减速。

LinearOutSlowInInterpolator

持续减速。

它和 DecelerateInterpolator 比起来,同为减速曲线,主要区别在于 LinearOutSlowInInterpolator 的初始速度更高。对于人眼的实际感觉,区别其实也不大,不过还是能看出来一些的。

你可能感兴趣的:(android基础进阶)