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。