本篇接上一篇: AnimatorSet的使用,将多个Animator组合进行动画 动画的监听
可见Animator是最上层的抽象类,定义了动画的基本操作,AnimatorSet、ValueAnimator作为子类,ObjectAnimator是ValueAnimator的子类
关系图.png
set动画集合.gif
AnimatorSet set = new AnimatorSet();
set
.play(translationX())
.with(alpha())
.after(1000)
.before(scaleX())
.before(scaleY());
set.start();
可见Animator有两个内部接口,Animator.AnimatorListener和Animator.AnimatorPauseListener。 AnimatorListenerAdapter是AnimatorListener和AnimatorPauseListener的实现者,其中实现方法为空,也就是一个适配器,相当于两个接口的功能和。 AnimatorUpdateListener是ValueAnimator的接口,用于更新时回调
监听接口关系.png
//动画开启时回调
void onAnimationStart(Animator animation);
//动画结束时回调
void onAnimationEnd(Animator animation);
//动画取消时回调
void onAnimationCancel(Animator animation);
//重复时回调
void onAnimationRepeat(Animator animation);
动画效果如下:抬起手时取消动画
动画监听.gif
mTranslationX = translationX();
mTranslationX.setRepeatMode(ValueAnimator.REVERSE);
mTranslationX.setRepeatCount(ValueAnimator.INFINITE);
mTranslationX.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//开始时设为绿色
setColor(Color.GREEN);
}
@Override
public void onAnimationEnd(Animator animation) {
//结束时设为蓝色
setColor(Color.BLUE);
}
@Override
public void onAnimationCancel(Animator animation) {
//取消是大小变为50
setCircleR(50);
}
@Override
public void onAnimationRepeat(Animator animation) {
//重复时设为随机色
setColor(ColUtils.randomColor());
}
});
mTranslationX.start();
mTranslationX.cancel();//取消动画
//暂停回调
void onAnimationPause(Animator animation);
//恢复回调
void onAnimationResume(Animator animation);
效果如下:点击运动,右滑暂停颜色变黄,下滑恢复颜色变蓝
暂停监听.gif
mTranslationX.addPauseListener(new Animator.AnimatorPauseListener() {
@Override
public void onAnimationPause(Animator animation) {
setColor(Color.YELLOW);//暂停黄色
}
@Override
public void onAnimationResume(Animator animation) {
setColor(Color.BLUE);//恢复蓝色
}
});
//更新时回调
void onAnimationUpdate(ValueAnimator animation);
效果如下:每当更新是将半径和位移联动
更新监听.gif
mTranslationX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mCircleR = (Float) animation.getAnimatedValue();
invalidate();
}
});
下一篇将带来插值器与估值器的详细讲解
1本文由张风捷特烈原创,转载请注明
2欢迎广大编程爱好者共同交流
3个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4你的喜欢与支持将是我最大的动力