1. 程式人生 > >Android屬性動畫-ObjectAnimator

Android屬性動畫-ObjectAnimator

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