D10-Android自定义控件之动画篇2-动画监听

mac2022-06-30  173

本篇接上一篇: AnimatorSet的使用,将多个Animator组合进行动画 动画的监听


一、AnimatorSet的使用

在此之前先看一下AnimatorSet、Animator、ObjectAnimator、ValueAnimator的关系

可见Animator是最上层的抽象类,定义了动画的基本操作,AnimatorSet、ValueAnimator作为子类,ObjectAnimator是ValueAnimator的子类

关系图.png
在延迟一秒后,进行translationX动画伴随alpha动画,然后scaleX(),scaleY()同时执行
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
1、Animator.AnimatorListener:动画监听
//动画开启时回调 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();//取消动画
2、AnimatorPauseListener:动画暂停监听
//暂停回调 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);//恢复蓝色 } });
3、AnimatorUpdateListener
//更新时回调 void onAnimationUpdate(ValueAnimator animation);

效果如下:每当更新是将半径和位移联动

更新监听.gif mTranslationX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { mCircleR = (Float) animation.getAnimatedValue(); invalidate(); } });

下一篇将带来插值器与估值器的详细讲解


后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明 [2]欢迎广大编程爱好者共同交流 [3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 [4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002 邮箱:1981462002@qq.com 微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg

转载于:https://www.cnblogs.com/toly-top/p/9781875.html

最新回复(0)