读取这篇文章后,经过个人理解,写的:
http://blog.csdn.net/guolin_blog/article/details/43536355
ValueAnimator---ofObject()的基本使用:
ValueAnimator anim = ValueAnimator.ofObject(TypeEvaluator evaluator,Object... values);
方法说明:在上篇文章中说到ValueAnimator的ofInt()与ofFloat()方法,都是只能针对int类型或者浮点型数据的变化,而ofObject()是可以对应一切对象的变化;(ofInt()与ofFloat()只是ofObject()中的一种,系统已经封装好了的,特定的ofObject())
参数说明以及解释:
TypeEvaluator(类型计算器):这是一个接口,我们需要实现它;
第一 这个接口是的代码:
public interfaceTypeEvaluator<T> {
T evaluate(float var1,T var2,T var3);
}
evaluate方法的参数与解释:
var1:动画的进度;(一个0~1之间的数浮点型数据)
var2:动画的初始状态;
var3:动画的结束状态;
方法的功能:根据当前的进度,求出与之相对应的动画的状态;(有点类似根据X求Y的数学计算)
然后通过addUpdateListener实时监听不同时间对应的动画状态。
个人理解:每次Update的时候,系统会计算出当前动画的进度,然后调用TypeEvaluator的实现类,获得当前对象状态,并返回;
TypeEvaluator代码示例:
public classPointEvaluatorimplementsTypeEvaluator {
@Override
publicObjectevaluate(floatfraction,Object startValue,Object endValue) {
Point startPoint = (Point) startValue;
Point endPoint = (Point) endValue;
float x = startPoint.getX() + fraction * (endPoint.getX() - startPoint.getX());
float y = startPoint.getY() + fraction * (endPoint.getY() - startPoint.getY());
float zm;
if(fraction*100%10>5){
zm=fraction*100%10;
}else{
zm=10-fraction*100%10;
}
floatz =startPoint.getR()+zm*3;
Point point =newPoint(x,y,z);
returnpoint;
}
}
ObjectAnimator的ofObject()的使用方法:
ofObject(T target,Property property,TypeEvaluator evaluator,V... values);
方法说明:ObjectAnimator是针对控件的属性,控件中必须有该属性的set与get方法,(当动画执行的时候会不断调用set方法);
参数说明:
target:用于指明具体是哪个控件(哪个类的实例);
property:指定具体要实现动画的属性;
TypeEvaluator evaluator:上面提到过,类型计算器,根据动画进度值求得对用的属性值,并返回
values:用于指明属性数值的变化开始和结束数值;
ObjectAnimator与ValueAnimator的区别:
ValueAnimator:是针对数值变化,一般在addUpdateListener获得变化过程的数值,进行具体操作;
ObjectAnimator:针对具体类的实例中的属性进行操作(必须有该属性的get与set方法),继承来自ValueAnimator;
Interpolator的用法
Interpolator:被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。
如何设置interpolator:
anim.setInterpolator(new AccelerateInterpolator(2f));
系统自带的interpolatro--来自http://blog.csdn.net/jason0539/article/details/16370405
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator 动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator 以常量速率改变
OvershootInterpolator 向前甩一定值后再回到原来位置
如何实现自己的Interpolator:
public class Myinterpolator implements TimeInterpolator{
@Override
public float getInterpolation(float input) {
return result;
}}
anim.setInterpolator(new Myinterpolator());
方法以及参数说明:首先我们要实现接口TimeInterpolator;
说明:input:随着动画的运行而不断变化,不过它的变化是非常有规律的,就是根据设定的动画时长匀速增加,变化范围是0到1。
而我们经过运算逻辑,将数值变化后返回变化后进行变化的更改;当input与restule曲线斜率越高,动画执行速度就越快