学习 自定义控件三部曲之动画篇(四)——ValueAnimator基本使用所做的笔记
总共有两种类型:View Animation(视图动画)和Property Animator(属性动画)
其中:
View Animation包括Tween Animation(补间动画)和Frame Animation(逐帧动画);
1.Property Animator能实现补间动画无法实现的功能 比如:改变控件的颜色
2.View Animation仅对指定的控件做动画,而Property Animator是通过改变控件的某一个属性值做动画
3.补间动画虽能对控件做动画,但并没有改变控件内部的属性值
第一步:创建ValueAnimator实例
ValueAnimator animator = ValueAnimator.ofInt(0,400);
animator.setDuration(1000);
animator.start();
第二步:添加监听
ValueAnimator animator = ValueAnimator.ofInt(0,400);
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int curValue = (int)animation.getAnimatedValue();
}
});
animator.start();
总结:
ValueAnimator只负责对指定的数字区间进行动画运算
我们对运算过程进行监听,然后自己对控件做动画操作
我们在设定动画初始值时用的是ofFloat()函数,所以每个值的类型必定是Float类型,所以我们获取出来的类型也必然是Float类型。同样,如果我们使用ofInt设定的初始值,那么通过getAnimatedValue()获得的值就应该强转为Int类型。
设置动画时长,单位是毫秒
ValueAnimator setDuration(long duration)
获取ValueAnimator在运动时,当前运动点的值
Object getAnimatedValue();
开始动画
void start()
设置循环次数,设置为INFINITE表示无限循环
void setRepeatCount(int value)
设置循环模式
value取值有RESTART,REVERSE
void setRepeatMode(int value)
取消动画
void cancel()
setRepeatCount(int value)用于设置动画循环次数,设置为0表示不循环,设置为ValueAnimation.INFINITE表示无限循环
animator.addUpdateListener,以监听动画过程中值的实时变化
其实在ValueAnimator中共有两个监听器:
监听器一:监听动画变化时的实时值
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)
关于监听器一:AnimatorUpdateListener就是监听动画的实时变化状态,在onAnimationUpdate(ValueAnimator animation)中的animation表示当前状态动画的实例。
在AnimatorListener中,主要是监听Animation的四个状态,start、end、cancel、repeat;当动画开始时,会调用onAnimationStart(Animator animation)方法,当动画结束时调用onAnimationEnd(Animator animation),当动画取消时,调用onAnimationCancel(Animator animation)函数,当动画重复时,会调用onAnimationRepeat(Animator animation)函数
添加AnimatorListener的方法是addListener(AnimatorListener listener);
移除AnimatorUpdateListener
void removeUpdateListener(AnimatorUpdateListener listener);
void removeAllUpdateListeners();
移除AnimatorListener
void removeListener(AnimatorListener listener);
void removeAllListeners();
延时多久时间开始,单位是毫秒
public void setStartDelay(long startDelay)
完全克隆一个ValueAnimator实例,包括它所有的设置以及所有对监听器代码的处理
public ValueAnimator clone()
clone()方法就好比克隆技术,克隆羊和原来的羊什么都是一样的,但你把原来的羊杀了,克隆的羊会死吗?当然不会了