ValueAnimator

ValueAnimator是对值的变换,他是非常一般的抽象。这个类里面有好多的以of开头的静态方法, 用来创建一个该类的实例。

这些方法如下:

public static ValueAnimator ofArgb(int... values)
public static ValueAnimator ofInt(int... values)
public static ValueAnimator ofFloat(float... values)
public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values)
public static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)

变换是什么?变化是有一系列的值,从某个值平滑的变化到另外一个值,依次这么平滑的变化完。

也就是变换至少得有两个值,也就是从哪儿到哪儿。

注意后面的可变参数。你可以传入1个变量,也可以传入2个变量,还可以传入3个变量、4个变量等等。

当只传入一个值的时候,就表示到哪儿,从哪儿是类型的默认值。int类型的默认值是0,float类型的默认值是0,对象的默认值是null等。

示例1:

ValueAnimator valueAnimator = ValueAnimator.ofInt(100).setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int progress = (int) animation.getAnimatedValue();
        progressBar.setProgress(progress);
    }
});
valueAnimator.start();

这里,ValueAnimator.ofInt(100)就等同于ValueAnimator.ofInt(0, 100)

ValueAnimator必须要设置监听器,在监听器中修改目标对象,才有意义,因为ValueAnimator本身并不关心要作用的对象, 他只提供变换方法。

示例2:

ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100, 0).setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int progress = (int) animation.getAnimatedValue();
        progressBar.setProgress(progress);
    }
});
valueAnimator.start();

这里,ValueAnimator.ofInt(0, 100, 0)表示值从0变换到100,然后再从100变化到0。