Android屬性動畫-ObjectAnimator
阿新 • • 發佈:2019-01-13
1 概覽
先看一下屬性動畫的結構,View動畫的基類是Animation,屬性動畫的基類是Animator
- ValueAnimator:這個動畫是針對屬性的值進行動畫的 ,不會對UI造成改變,不能直接實現動畫效果。需要通過對動畫的監聽去做一些操作,在監聽中將這個值設定給對應的屬性,對應的屬性才會改變。
- ObjectAnimator:直接動畫所給的物件,他會呼叫物件對應屬性的get/set方法吧屬性的值設定給物件的屬性,直接實現動畫效果。
- TimeAnimator:這個也不直接實現動畫效果,只是提供一個監聽回撥,返回動畫執行的總時間,距離上次動畫執行的時間等。
2 使用
利用 ObjectAnimator 的 ofFloat 方法如何實現一個動畫:(改變透明度)
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);
animator.setDuration(2000);
animator.start()
分析一下 ofFloat(Object target, String propertyName, float… values) 引數:
引數 | 解釋 |
target 物件 | 指定這個動畫要操作的是哪個控制元件 |
propertyName 屬性名 | 指定這個動畫要操作這個控制元件的哪個屬性,這個屬性名要求在兌現中必須有對應的public的PsetPropertyName的方法。 |
values | 可變長引數,指這個屬性值是從哪變到哪。像我們上面的程式碼中指定的就是將 textview 的 alpha 屬性從 0 變到 1 再變到 0; |
3 常見的屬性動畫
4 屬性動畫的監聽
/** * 監聽器一:監聽動畫變化時的實時值 */ public static interface AnimatorUpdateListener { void onAnimationUpdate(ValueAnimator animation); } //新增方法為:public void addUpdateListener(AnimatorUpdateListener listener) /** * 監聽器二:監聽動畫變化時四個狀態 */ public static interface AnimatorListener { void onAnimationStart(Animator animation); void onAnimationEnd(Animator animation); void onAnimationCancel(Animator animation); void onAnimationRepeat(Animator animation); } //新增方法為:public void addListener(AnimatorListener listener)
有時候我們不需要監聽這麼多狀態,只需要監聽其中某個狀態,我們可以實現另外一個監聽。
animator.addListener(new AnimatorListenerAdapter() {
//可以實現任何一種你需要的監聽
//OnAnimationCancel
//OnAnimationEnd
//OnAnimationRepeat
//OnAnimationStart
//OnAnimationPause
//OnAnimationResume
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
});
其他參考:
Android動畫-屬性動畫-ObjectAnimator
ObjectAnimator 基本使用
Android動畫-屬性動畫-ValueAnimato