TimeInterpolator 时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比。系统预置的有LinearInterpolator(线性插值器,匀速动画),AccelerateDecelerateInterpolator(加速减速插值器,动画两头慢中间快),DecelerateInterpolator(减速插值器,动画愈来越慢)等。
TypeEvaluator 估值器,他的作用是根据当前属性改变的百分比计算出改变后的属性值。系统预置的有IntEvaluator(针对整型属性),FloatEvaluator(针对浮点型属性)和ArgbEvalutor(针对Color属性)。
属性动画中的插值器和估值器是实现非匀速动画的重要属性。
我们通过一些源码来理解插值器和估值器对属性动画的影响:
public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
public LinearInterpolator() {
}
public LinearInterpolator(Context context, AttributeSet attrs) {
}
public float getInterpolation(float input) {
return input;
}
/** @hide */
@Override
public long createNativeInterpolator() {
return NativeInterpolatorFactoryHelper.createLinearInterpolator();
}
}
通过这个方法getInterpolation(float input)可以看出线性插值器的输入值和返回值一样,即时间流逝的百分比=当前属性改变的百分比;
接着看整型估值器的源码:
public class IntEvaluator implements TypeEvaluator<Integer> {
public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
int startInt = startValue;
return (int)(startInt + fraction * (endValue - startInt));
}
}
通过这个方法evaluate(float fraction, Integer startValue, Integer endValue) 可以看出整型估值和估值小数、起始值有关。而估值小数又和插值器相关,插值器的返回值=估值小数(fraction)。
除了系统提供的插值器和估值器之外,我们也可以自定义。实现方式也很简单,我们只要派生一个类实现插值器和估值器的接口就可以了。具体一点就是:自定义插值器需要实现Interpolator或者TimeInterpolator,自定义估值器需要实现TypeEvaluator。