1 概览
先看一下属性动画的结构,View动画的基类是Animation,属性动画的基类是Animator
文章图片
- ValueAnimator:这个动画是针对属性的值进行动画的 ,不会对UI造成改变,不能直接实现动画效果。需要通过对动画的监听去做一些操作,在监听中将这个值设置给对应的属性,对应的属性才会改变。
- ObjectAnimator:直接动画所给的对象,他会调用对象对应属性的get/set方法吧属性的值设置给对象的属性,直接实现动画效果。
- TimeAnimator:这个也不直接实现动画效果,只是提供一个监听回调,返回动画执行的总时间,距离上次动画执行的时间等。
利用 ObjectAnimator 的 ofFloat 方法如何实现一个动画:(改变透明度)
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);
animator.setDuration(2000);
animator.start()
分析一下 ofFloat(Object target, String propertyName, float… values) 参数:
参数 | 解释 |
target 对象 | 指定这个动画要操作的是哪个控件 |
propertyName 属性名 | 指定这个动画要操作这个控件的哪个属性,这个属性名要求在兑现中必须有对应的public的PsetPropertyName的方法。 |
values | 可变长参数,指这个属性值是从哪变到哪。像我们上面的代码中指定的就是将 textview 的 alpha 属性从 0 变到 1 再变到 0; |
文章图片
4 属性动画的监听
/**
* 监听器一:监听动画变化时的实时值
*/
public static interface AnimatorUpdateListener {
void onAnimationUpdate(ValueAnimator animation);
}
//添加方法为:public void addUpdateListener(AnimatorUpdateListener listener)
/**
* 监听器二:监听动画变化时四个状态
*/
public static interface AnimatorListener {
void onAnimationStart(Animator animation);
void onAnimationEnd(Animator animation);
void onAnimationCancel(Animator animation);
void onAnimationRepeat(Animator animation);
}
//添加方法为:public void addListener(AnimatorListener listener)
有时候我们不需要监听这么多状态,只需要监听其中某个状态,我们可以实现另外一个监听。
animator.addListener(new AnimatorListenerAdapter() {
//可以实现任何一种你需要的监听
//OnAnimationCancel
//OnAnimationEnd
//OnAnimationRepeat
//OnAnimationStart
//OnAnimationPause
//OnAnimationResume
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
其他参考:
【Android属性动画-ObjectAnimator】Android动画-属性动画-ObjectAnimator
ObjectAnimator 基本使用
Android动画-属性动画-ValueAnimato