屬性動畫插值器Interpolator

屬性動畫可以設置插值器,其實就是速度設置器。填入不同的 Interpolator ,動畫就會以不同的速度模型來執行。

AccelerateDecelerateInterpolator

先加速再減速。這是默認的 Interpolator,也就是說如果你不設置的話,那麼動畫將會使用這個 Interpolator。

這個是一種最符合現實中物體運動的 Interpolator,它的動畫效果看起來就像是物體從速度爲 0 開始逐漸加速,然後再逐漸減速直到 0 的運動。它的速度 / 時間曲線以及動畫完成度 / 時間曲線都是一條正弦 / 餘弦曲線

LinearInterpolator

勻速

AccelerateInterpolator

持續加速。

DecelerateInterpolator

持續減速直到 0。

AnticipateInterpolator

先回拉一下再進行正常動畫軌跡,比如彈弓的整個發射過程

OvershootInterpolator

動畫會超過目標值一些,然後再彈回來,像是蹦牀的效果

AnticipateOvershootInterpolator

這個是前兩個的結合,像是彈弓發射到蹦牀上被反彈回來

BounceInterpolator

在目標值處彈跳。有點像玻璃球掉在地板上的效果。

CycleInterpolator

這個不太好描述,它和 AccelerateDecelerateInterpolator 的區別是,它可以自定義曲線的週期,所以動畫可以不到終點就結束,也可以到達終點後回彈,回彈的次數由曲線的週期決定,曲線的週期由 CycleInterpolator() 構造方法的參數決定。可以將參數設置爲0.5f和2f分別看一下效果。

PathInterpolator

自定義動畫完成度 / 時間完成度曲線。

用這個 Interpolator 你可以定製出任何你想要的速度模型。定製的方式是使用一個 Path 對象來繪製出你要的動畫完成度 / 時間完成度曲線。例如:

Path interpolatorPath = new Path();

...

// 勻速
interpolatorPath.lineTo(1, 1);  

再例如

Path interpolatorPath = new Path();

...

// 先以「動畫完成度 : 時間完成度 = 1 : 1」的速度勻速運行 25%
interpolatorPath.lineTo(0.25f, 0.25f);  
// 然後瞬間跳躍到 150% 的動畫完成度
interpolatorPath.moveTo(0.25f, 1.5f);  
// 再勻速倒車,返回到目標點
interpolatorPath.lineTo(1, 1);  

不過要注意,這條 Path 描述的其實是一個 y = f(x) (0 ≤ x ≤ 1) (y 爲動畫完成度,x 爲時間完成度)的曲線,所以同一段時間完成度上不能有兩段不同的動畫完成度(因爲內容不能出現分身術),而且每一個時間完成度的點上都必須要有對應的動畫完成度(因爲內容不能在某段時間段內消失)。

也就是說,x與y是一一對應的點,動畫執行過程中,注意是過程中,不能出現x對應兩個y,也不能出現x無對應值,否則會導致程序FC

除了上面的這些,Android 5.0 (API 21)引入了三個新的 Interpolator 模型,並把它們加入了 support v4 包中。這三個新的 Interpolator 每個都和之前的某個已有的 Interpolator 規則相似,只有略微的區別。

FastOutLinearInInterpolator

加速運動

這個 Interpolator 的作用你不能看它的名字,一會兒 fast 一會兒 linear 的,完全看不懂。其實它和 AccelerateInterpolator 一樣,都是一個持續加速的運動路線。只不過 FastOutLinearInInterpolator 的曲線公式是用的貝塞爾曲線,而 AccelerateInterpolator 用的是指數曲線。具體來說,它倆最主要的區別是 FastOutLinearInInterpolator 的初始階段加速度比 AccelerateInterpolator 要快一些。

也就是說,這個效果對於計算機來說會更加平滑一些,不過從肉眼來看幾乎看不出區別。

AccelerateDecelerateInterpolator

FastOutSlowInInterpolator 的前期加速更猛一些,後期的減速過程的也減得更迅速。用更直觀一點的表達就是,AccelerateDecelerateInterpolator 像是物體的自我移動,而 FastOutSlowInInterpolator 則看起來像有一股強大的外力「推」着它加速,在接近目標值之後又「拽」着它減速。

LinearOutSlowInInterpolator

持續減速。

它和 DecelerateInterpolator 比起來,同爲減速曲線,主要區別在於 LinearOutSlowInInterpolator 的初始速度更高。對於人眼的實際感覺,區別其實也不大,不過還是能看出來一些的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章