比如一个需求,想要一个按钮的呼吸效果,采用类似AccelerateDecelerateInterpolator的插值器。
这不就是进度从0到1再到0吗,容易想到:
ValueAnimator.ofFloat(0,1,0).
setInterpolator(new AccelerateDecelerateInterpolator()).
start()
但结果其实并不对
为啥不对呢?
这是插值器工作原理导致的。
通过观看源码,ValueAnimator每一帧的value计算方法大体如下。总体上是一个根据fraction给出value的过程。
float fraction = interpolator.getInterpolation(t); // 根据当前时间得到当前跑到多少进度了。
final float prevFraction = prevKeyframe.getFraction(); // 前一关键帧进度
final float nextFraction = nextKeyframe.getFraction(); // 后一