[Android 動畫]簡要分析一下Animator 與 Animation

大家如果喜歡我的博客,請關注一下我的微博,請點擊這裏(http://weibo.com/kifile),謝謝

轉載請標明出處(http://blog.csdn.net/kifile),再次感謝


在 Android 的開發過程中, 大家平時一般都或多或少會使用到一些動畫, 通常大家一般使用的都是 Animation, 但是實際上Android 在3.0的時候就已經推出了 Animator 框架用以提升 Android 本身的動畫效果,雖然我們一般基於2.x 開發的時候無法享受到 Animator 服務,但是這並不影響我們來體驗一下他的強大之處.


首先我們先來了解一下 Animation,Animation框架的支持要比 Animator 早得多,從 Android 發佈之日起就一直存在,他主要有以下幾個子類,AlphaAnimation(透明度), RotateAnimation(旋轉), ScaleAnimation(縮放), TranslateAniamtion(平移), AnimationSet(動畫集合)


從名字上,我們就能很清楚的知道 Aniamtion 所支持的動畫種類還是很少的, 無非是透明,旋轉,縮放,平移這幾種的子集.


而相較於 Aniamtion而言, Animator 動畫則顯得更加強大, 他不僅可以針對 View 實行動畫, 甚至可以對所有的 Object 執行"動畫"操作,並且使用 Animator 之後的動畫效果與使用 Animation 的效果也完全不同.


Animator 動畫與 Animation 動畫實際上有很多類似的接口,例如 duration 和 interceptor, 其作用都是用來判定動畫具體的實現時長以及差值器,對於這個,我們就不用過多介紹.

我們先來看一下 Animator 動畫與 Animation 動畫的相關實現原理:

(1)對於 Animation 動畫:

他的實現機制是,在每次進行繪圖的時候,通過對整塊畫布的矩陣進行變換,從而實現一種視圖座標的移動,但實際上其在 View 內部真實的座標位置及其他相關屬性始終恆定.

(2)對於 Animator 動畫:

Animator 動畫的實現機制說起來其實更加簡單一點,因爲他其實只是計算動畫開啓之後,結束之前,到某個時間點得時候,某個屬性應該有的值,然後通過回調接口去設置具體值,其實 Animator 內部並沒有針對某個 view 進行刷新,來實現動畫的行爲,動畫的實現是在設置具體值的時候,方法內部自行調取的類似 invalidate 之類的方法實現的.也就是說,使用 Animator ,內部的屬性發生了變化.


說完他們的基本實現原理,我們現在來對比一下他們的優勢劣勢:

(1)版本兼容

不得不說,相對於 Animation,Animator 的版本兼容性還是太差,直到 Android3.0纔開始出現的 Animator, 是無法滿足目前開發環境2.x 的兼容支持的,而且在 android 官方的 support 包中也沒有對於低版本的 Animator 進行支持,所以單從版本兼容來看, Animator 還是不夠的,不過這是系統歷史原因,我們只能接受.

(2)實現效率

同樣的,這也是 Animator 的一個缺點,由於 Animator 是直接通過設置對象的 setter,getter 方法,來起到動畫顯示效果的,所以爲了滿足對任意對象調用正確方法, Animator 使用了 Java 反射機制, 而 Animation 則是直接通過代碼對矩陣進行處理,所以就效率這一方面而言, Animator比不上 Animation

已經說了 Animator 相較於 Animation 的兩種劣勢了,那麼我們再來說說 Animator 相較於 Animation 的優勢

(3)適用性

在上一個分析中,我們看到了由於 Animator 使用了反射機制導致其效率偏低,但是這也帶來了他適用的對象範圍的增加, Animation 僅對 View 這一種對象有用,但是 Animator 可以設置任意對象的屬性,使其在某段時間內進行變化

(4)使用效果

相信大家平時使用 Animation 的時候,都有發現當正在進行平移移動,或者動畫結束後,但位置發生改變的時候,你點擊之前的位置,點擊效果仍然存在,這就是因爲 View 在內部的座標位置其實沒有發生改變,而如果使用 Animator 進行位移變換,那麼你的點擊位置就會隨着動畫效果發生相應改變,所以即使你正處在動畫過程中,你也可以去點擊按鈕得到你想要的效果.


以上四點就是 Animation 和 Animator 的優勢劣勢分析,希望對大家有用

發佈了28 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章