Android属性动画 监听器、翻转、暂停和恢复
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/118794419
本文出自【趙彥軍的博客】
文章目錄
- 監聽器
- addListener
- addUpdateListener
- removeListener
- Kotlin 擴展
- 翻轉
- 暫停、恢復
監聽器
在很多時候,我們希望可以監聽到動畫的各種事件,比如動畫何時開始,何時結束,然后在開始或者結束的時候去執行一些邏輯處理。這個功能是完全可以實現的,Animator類當中提供了一個addListener()方法,這個方法接收一個AnimatorListener,我們只需要去實現這個AnimatorListener就可以監聽動畫的各種事件了。
addListener
大家已經知道,ObjectAnimator是繼承自ValueAnimator的,而ValueAnimator又是繼承自Animator的,因此不管是ValueAnimator還是ObjectAnimator都是可以使用addListener()這個方法的。另外AnimatorSet也是繼承自Animator的,因此addListener()這個方法算是個通用的方法。
var animator = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f) animator.addListener(object : Animator.AnimatorListener {override fun onAnimationStart(animation: Animator?) {}override fun onAnimationEnd(animation: Animator?) {}override fun onAnimationCancel(animation: Animator?) {}override fun onAnimationRepeat(animation: Animator?) {}})可以看到,我們需要實現接口中的四個方法。
- onAnimationStart()方法會在動畫開始的時候調用
- onAnimationRepeat()方法會在動畫重復執行的時候調用
- onAnimationEnd()方法會在動畫結束的時候調用
- onAnimationCancel()方法會在動畫被取消的時候調用
單獨說一下,onAnimationRepeat() 這個方法,一定是要設置
animator.repeatCount = 3否則不會回調。
再來看看,setRepeatCount 方法。
可以看到,mRepeatCount 默認值是0 , 如果我們設置了repeatCount = 3,代表重復執行3次, 那么動畫一共會執行4次。
但是也許很多時候我們并不想要監聽那么多個事件,可能我只想要監聽動畫結束這一個事件,那么每次都要將四個接口全部實現一遍就顯得非常繁瑣。沒關系,為此Android提供了一個適配器類,叫作AnimatorListenerAdapter,使用這個類就可以解決掉實現接口繁瑣的問題了,如下所示:
var animator = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f) animator.addListener(object : AnimatorListenerAdapter() {})這里我們向addListener()方法中傳入這個適配器對象,由于AnimatorListenerAdapter中已經將每個接口都實現好了,所以這里不用實現任何一個方法也不會報錯。那么如果我想監聽動畫結束這個事件,就只需要單獨重寫這一個方法就可以了,如下所示:
var animator = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f) animator.addListener(object : AnimatorListenerAdapter() {override fun onAnimationCancel(animation: Animator?) {super.onAnimationCancel(animation)} })addUpdateListener
animator.addUpdateListener(object : ValueAnimator.AnimatorUpdateListener {override fun onAnimationUpdate(animation: ValueAnimator) {//獲取當前值val currentValue = animation.animatedValue}})removeListener
移除監聽器
animator.removeAllListeners() animator.removeAllUpdateListeners() animator.removeListener(AnimatorListener listener) animator.removeUpdateListener(AnimatorUpdateListener listener) animator.removePauseListener(AnimatorPauseListener listener)Kotlin 擴展
在 ktx 里面,有 AnimatorKt 對屬性動畫監聽器做了擴展
舉例:
還有其他擴展,我就不舉例了
翻轉
就是講動畫翻轉執行,如果原動畫執行到一半的時候,調用reverse() 會將動畫從一半的位置翻轉執行。
animator.reverse()暫停、恢復
在 Android 4.4 后,新增了 pause() 、resume() 方法,可以暫停/恢復動畫。
//暫停 animator.pause()//恢復 animator.resume()總結
以上是生活随笔為你收集整理的Android属性动画 监听器、翻转、暂停和恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android属性动画 Animator
- 下一篇: Android属性动画 XML