逐帧动画

属性动画 ValueAnimator

可直接修改任何属性,形成动画

补间动画 ObjectAnimator (平移,旋转,缩放,透明度等)

确定开始状态和结束状态,中间有系统计算来补充

插值器决定属性值随时间变化的规律;而具体变化属性数值则交给估值器去计算。

插值器

根据时间流失的百分比 计算当前属性改变的百分比。(LinearInterpolator 匀速;AccelerateInterpolator 加速)

继承BaseInterpolaor,实现getInterpolation()方法

1
2
3
4
5
6
7
8
//插值计算的核心方法,定义了插值的映射关系
public float getInterpolation(float input) {
if (mFactor == 1.0f) {
return input * input;
} else {
return (float)Math.pow(input, mDoubleFactor);
}
}

估值器

根据当前属性改变的百分比来计算改变后的属性值。

继承TypeEvaluator,实现evaluate();

1
2
3
4
5
6
7
8
9
10
// 复写evaluate()
// 在evaluate()里写入对象动画过渡的逻辑
@Override
public Point evaluate(float fraction, Point startValue, Point endValue) {
// 根据fraction来计算当前动画的x和y的值
int x = (int) (startValue.x + fraction * (endValue.x - startValue.x));
int y = (int) (startValue.y + fraction * (endValue.y - startValue.y));
// 将计算后的坐标封装到一个新的Point对象中并返回
return new Point(x, y);
}

这位大佬讲的很详细: http://gityuan.com/2015/09/05/android-anaimator-3/