Android 属性动画的基本理解(二)

读取这篇文章后,经过个人理解,写的:

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 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曲线斜率越高,动画执行速度就越快

你可能感兴趣的:(Android 属性动画的基本理解(二))