D10-Android自定義控制元件之動畫篇2-動畫監聽
一、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
微信:zdl1994328
4.歡迎關注我的微信公眾號,最新精彩文章,及時送達:

公眾號.jpg