1. 程式人生 > >android動畫知識總結

android動畫知識總結

Android中的動畫可以分為三種:View動畫、幀動畫、屬性動畫

View動畫通過對場景裡的物件不斷做影象變換(平移、縮放、旋轉、透明度)從而產生動畫效果,是一種漸進式動畫,並且View動畫支援自定義。

幀動畫通過順序播放一系列影象從而產生動畫效果,可以簡單理解為圖片切換動畫,很顯然,圖片過大就會導致OOM

屬性動畫通過動態的改變物件的屬性從而達到動畫效果

自定義View動畫需要繼承Animation這個類,然後重寫它的initialize和applyTransformation方法,在initialize方法中做一些初始化的東西,在applyTransformation中進行相應的矩陣變化,很多時候需要Canvas簡化矩陣變化的過程。

幀動畫播放使用AnimationDrawable,首先通過XML來定義一個AnimationDrawable,然後將建立的Drawable作為View的背景並通過Drawable來播放。

LayoutAnimation作用於ViewGroup為ViewGroup提供一個動畫,這樣當他的子元素出場時都會有這種動畫效果。常備用在ListView上。

LayoutAnimation的兩種使用方式:一種是建立在XML檔案中指定layoutAnimation屬性,設定資源ID,另一中是在程式碼中通過LayoutAnimationController來完成。

Activity切換動畫效果主要通過overridePendingTransition指定,這個方法必須在startActivity和finish之後才會被呼叫,因此需要指定時可以通過重寫Activity的finish方法,然後在其後指定退出動畫,當然也可以通過設定Activity的theme,在style檔案中設定動畫資源

屬性動畫是在一個時間間隔內完成物件從一個屬性值到另一個屬性值的改變。

屬性動畫中repeatCount為-1時表示無線迴圈播放

屬性動畫的插值器和估值器:插值器是指根據時間流逝的百分比來計算出當前屬性值改變的百分比,系統內建的有線性插值器、加速減速插值器、減速插值器。估值器是指根據屬性值改變的百分比來計算改變後的屬性值,系統內建的有針對整形屬性,浮點型屬性和Color屬性。所以估值器依賴於插值器,插值器先根據時間流逝的百分比計算出屬性改變的百分比,然後估值器根據插值器獲到的屬性值改變的百分比計算出改變後的屬性值,

屬性動畫的原理:屬性動畫要求動畫作用的物件提供該屬性的set和get方法,屬性動畫根據外界傳遞的該屬性的初始值和最終值,以動畫的效果多次去呼叫set方法,注:get方法是在沒有傳入動畫初始值時,JIN底層通過反射去獲得物件的屬性值。

屬性動畫生效的兩個條件:必須提供屬性對應的set方法和對屬性所做的改變必須能夠通過某種方式反映出來

三種解決任意屬性不滿足屬性動畫條件的方法:

1.給你的物件加上get和set方法如果你有許可權的話

2.用一個類來包裝原始物件,間接為其提供get和set方法

3.採用ValueAnimation,監聽動畫過程,自己實現屬性的改變。

ValueAnimation本身不作用於任何物件,也就是說直接作用於它沒有任何動畫效果,他可以對一個值做動畫效果,然後開發者可以監聽其變化過程,在動畫修改過程中修改物件所對應的屬性值。

使用動畫的注意事項:

1.OOM問題,特別是使用幀動畫時,圖片數量較多且圖片較大時

2.記憶體洩漏,屬性動畫中的無限迴圈動畫在Activity退出時必須及時停止,否則將導致Activity無法釋放從而造成記憶體洩漏。

3.View動畫問題,View動畫是對View的影像做動畫,並不是真正的改變View的狀態,因此有時候會出現動畫完成後View無法隱藏的現象,即setVisibility失效,這時候只需要呼叫view.clearAnimation清楚View動畫即可解決該問題。