插值器Interpolator
根据时间流失的百分比 计算当前属性改变的百分比。
使用场景:实现非线性运动的动画效果。
系统内置的插值器:
- LinearInterpolator: 默认的匀速
- AccelerateInterpolator: 逐渐加速
- DecelerateInterpolator: 逐渐减速
- AccelerateDecelerateInterpolator: 先加速再减速
- CycleInterpolator: 周期运动
- OvershootInterpolator: 回弹效果
自定义差值器
差值器原理:根据动画的进度百分比计算出当前属性值改变的百分比。
自定义差值器做法:实现Interpolator接口,重写getInterpolation方法。
比如DecelerateInterpolator的部分代码:
public class DecelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
public DecelerateInterpolator() {
}
public DecelerateInterpolator(float factor) {
mFactor = factor;
}
public DecelerateInterpolator(Context context, AttributeSet attrs) {
this(context.getResources(), context.getTheme(), attrs);
}
public float getInterpolation(float input) {
float result;
if (mFactor == 1.0f) {
result = (float)(1.0f - (1.0f - input) * (1.0f - input));
} else {
result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor));
}
return result;
}
private float mFactor = 1.0f;
}
自定义MyInterpolator差值器:
public class MyInterpolator implements Interpolator {
@Override
public float getInterpolation(float input) {
return input;
}
}
估值器Evaluator
根据当前属性改变的百分比来计算改变后的属性值。
自定义估值器
实现TypeEvaluator接口,重写evaluate方法。
class MyEvaluator implements TypeEvaluator<Float> {
@Override
public Float evaluate(float fraction, Float startValue, Float endValue) {
return (endValue-startValue)*fraction;
}
}
fraction 动画完成度,也就是插值器getInterpolation()的返回,代表当前属性值改变的百分比
startValue参数:动画的初始值
endValue参数:动画的结束值
系统内置的估值器
IntEvaluator Int类型估值器,返回int类型的属性改变
FloatEvaluator Float类型估值器,返回Float类型属性改变
ArgbEvaluator 颜色类型估值器,返回16进制颜色值