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

本学习笔记来自启舰的:
http://blog.csdn.net/harvic880925/article/details/50549385

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码表中对应数字是连续且递增的原理,先求出来对应字符的数字值,然后再转换成对应的字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值