android動畫詳解三 動畫API概述
·屬性動畫與view動畫的不同之處
view動畫系統提供了僅動畫View對象的能力,所以如果你想動畫非View對象,你就要自己實現代碼。view動畫系統實際上還被強制僅能對View的少數屬性進行動畫,比如縮放和旋轉,而不能對背景色進行。
view動畫的另一個壞處是它僅修改View的繪製位置,而不是View的實際位置。例如,如果你動畫一個移動穿越螢幕,button的繪製位置是正確的,但實際你可以點擊它的位置卻沒有變,所以你必須去實現你自己的邏輯來處理它。
使用屬性動畫系統時,這個限制被完全解除了,並且你可以動畫任何對象的任何屬性(View或非View)並且對象本身也會實際上被修改。並且屬性動畫系統本身對動畫的支援也更有力度。在高層,你分配動畫到要動畫的屬性上,比如顏色,位置、或大小然後定義動畫的參數比如插值演算法以及多個動畫的同步。
然而,view動畫系統只需要少量時間來設定並且不需要太多的代碼。如果view動畫完全滿足你的需求,或在你的舊代碼中能按你想的工作,那麼就不需要使用屬性動畫系統。也有可能在某些情況下需要同時用到這兩種動畫系統。
·API概覽
你可以在android.animation找到大部分的屬性動畫系統的API。因為view動畫系統已經在android.view.animation定義了很多插值演算法,你也可以在屬性動畫系統中使用它們。下面的表中描述了屬性動畫系統的主要組成。
Animator類提供了建立動畫的基礎。你一般不應直接使用此類,因為它僅提供了最少的功能。下面的子類們都是從Animator派生的。
表1.Animators
類 |
描述 |
ValueAnimator |
屬性動畫的主要基類。它計算要動畫的屬性的值。它具有所有計算動畫的值的核心函數,它包含每次動畫的時間資訊、是否重複播放、接收更新事件的監聽器等參數,還能設定如何計算自訂類型。動畫一個屬性要做兩條:計算動畫的值和設定這些值到對象或屬性上。ValueAnimator不負責第二條,所以你必須偵聽ValueAnimator對值的更新然後按你的邏輯在修改你要動畫的對象。 |
ObjectAnimator |
ValueAnimator的一個子類。允許你設定要動畫的目標對象和對象的屬性。此類會在計算齣動畫的新值時更新屬性。大多數時候你應選擇使用ObjectAnimator,因為用它處理對象的動畫更加容易。然而,你某些時候可能想直接使用ValueAnimator,因為ObjectAnimator具有很多限制,比如需要對象具有特定的操作器方法。 |
AnimatorSet |
提供了一個控制動畫組中動畫關係的機制。你可以設定多個動畫一起播放、分別播放、或延遲播放。 |
Evaluator告訴屬性動畫系統如何計算某個屬性的值。它們跟據Animator類提供的時間資訊,動畫的開始值和結束值計算動畫的值。屬性動畫系統提供了以下evaluator:
表2.Evaluator們
Class/Interface |
Description |
IntEvaluator |
計算int型屬性的預設evaluator。 |
FloatEvaluator |
計算float型屬性的預設evaluator。 |
ArgbEvaluator |
計算用十六進位值表示的顏色屬性的預設evaluator。 |
TypeEvaluator |
一個允許你建立自己的evaluator的介面。如果你要動畫的對象的屬性非int,float、或color,你就必須實現TypeEvaluator介面來定義如何計算對象屬性的動畫值。如果你想改變處理int,float,和color屬性的預設行為,你也可以為它們指定自訂的TypeEvaluator。 |
時間插值器定義了時間函數如何計算動畫的值。例如,你可以指定動畫過程是線性發生,這表示動畫均勻的運動;或者指定非線性時間,例如,開始時加速,結束時減速。表3描述了在android.view.animation中的插值器們。如果現有的插值器不能滿足你,你可以實現介面TimeInterpolator來建立你自己的插值器。
Table3.插值器們
類/介面 |
描述 |
AccelerateDecelerateInterpolator |
中間快兩頭慢的插值器。 |
AccelerateInterpolator |
一直加速的插值器。 |
AnticipateInterpolator |
先向後再猛向前的插值器。 |
AnticipateOvershootInterpolator |
先向後,再猛向前,超過結束值後再回到結束值的插值器。 |
BounceInterpolator |
最後跳一下的插值器。 |
CycleInterpolator |
重複迴圈播放的插值器。 |
DecelerateInterpolator |
一直減速的插值器。 |
LinearInterpolator |
定速播放的插值器。 |
OvershootInterpolator |
先猛向前直到超過結束值然後再回到開始值的插值器。 |
TimeInterpolator |
讓你能實現自己的插值器的介面。 |