五、ValueAnimator属性动画高级进阶(二)

来源:互联网 发布:吉他谱软件 编辑:程序博客网 时间:2024/05/28 19:23

ofObject()概述

ofInt()只能传入Integer类型的值,而ofFloat()则只能传入Float类型的值。那如果我们需要操作其它类型的变量要怎么办呢?其实ValueAnimator还有一个函数ofObject(),可以传进去任何类型的变量,定义如下:

public static ValueAnimatorofObject(TypeEvaluator evaluator, Object... values);

它有两个参数,第一个是自定义的Evaluator,第二个是Object类型的可变长参数;为什么要强制传进去自定义的Evaluator?首先,大家知道Evaluator的作用是根据当前动画的显示进度,计算出当前进度下对应的值。那既然Object对象是我们自定的,那必然从进度到值的转换过程也必须由我们来做,不然系统哪知道你要转成个什么鬼。

先看看例子:

public class MyCharsEvaluatorimplements TypeEvaluator<Character> {    @Override    public Character evaluate(float v, Character characterStart, Character characterEnd) {        intstart = (int)characterStart;        intend = (int)characterEnd;        intresult = (int)(start + v*(end - start));        char cha = (char)result;        return cha;    }}

在Activity中:

mValueAnimator= mValueAnimator.ofObject(new MyCharsEvaluator(),                 new Character('A'), new Character('Z'));mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {    @Override    public void onAnimationUpdate(ValueAnimatorvalueAnimator) {        char value = (char) valueAnimator.getAnimatedValue();        mTvTestObject.setText("设置新的value值:" + value);    }});mValueAnimator.setDuration(2000);mValueAnimator.setInterpolator(new AccelerateInterpolator());mValueAnimator.start();

在这里,我们就利用A-Z字符在ASCII码表中对应数字是连续且递增的原理,先求出来对应字符的数字值,然后再转换成对应的字符。

阅读全文
0 0
原创粉丝点击