本篇接上一篇:
AnimatorSet的使用,将多个Animator组合进行动画
动画的监听
一、AnimatorSet的使用
在此之前先看一下AnimatorSet、Animator、ObjectAnimator、ValueAnimator的关系
可见Animator是最上层的抽象类,定义了动画的基本操作,AnimatorSet、ValueAnimator作为子类,ObjectAnimator是ValueAnimator的子类
在延迟一秒后,进行translationX动画伴随alpha动画,然后scaleX(),scaleY()同时执行
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的接口,用于更新时回调
1、Animator.AnimatorListener:动画监听
//动画开启时回调
void onAnimationStart(Animator animation);
//动画结束时回调
void onAnimationEnd(Animator animation);
//动画取消时回调
void onAnimationCancel(Animator animation);
//重复时回调
void onAnimationRepeat(Animator animation);
动画效果如下:抬起手时取消动画
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();//取消动画
2、AnimatorPauseListener:动画暂停监听
//暂停回调
void onAnimationPause(Animator animation);
//恢复回调
void onAnimationResume(Animator animation);
效果如下:点击运动,右滑暂停颜色变黄,下滑恢复颜色变蓝
mTranslationX.addPauseListener(new Animator.AnimatorPauseListener() {
@Override
public void onAnimationPause(Animator animation) {
setColor(Color.YELLOW);//暂停黄色
}
@Override
public void onAnimationResume(Animator animation) {
setColor(Color.BLUE);//恢复蓝色
}
});
3、AnimatorUpdateListener
//更新时回调
void onAnimationUpdate(ValueAnimator animation);
效果如下:每当更新是将半径和位移联动