天天看點

《Android和PHP開發最佳實踐》一2.9 Android動畫效果

适當地使用動畫效果可以很好地提升android應用或遊戲的操作體驗。目前android系統支援的動畫效果主要有兩種,即逐幀動畫(frame animation)和補間動畫(tween animation)。雖然,在android 3.0以後的版本中還引入了新的動畫系統,但是目前最主流的動畫效果還是這兩種。

逐幀動畫類似于gif動畫圖檔,即按照順序播放圖檔。我們通常會在android項目的res/drawable/目錄下面定義逐幀動畫的xml模闆檔案。編碼的時候,需要在動畫模闆檔案的标簽中依次放入需要播放的圖檔,并設定好播放的間隔時間,如代碼清單2-34所示。

代碼清單 2-34

然後,就可以在activity界面控制器的邏輯中自由使用了。需要注意的是,逐幀動畫并不能獨立使用,動畫效果的顯示還是要借助于imageview圖像控件,簡單地說,也就是把動畫效果綁定到對應的imageview圖檔對象上。假設這裡的imageview元素的id值,即android:id屬性值為img_frame_anim,而之前定義的動畫模闆檔案名為demo_frame_anim.xml,逐幀動畫的使用範例如代碼清單2-35所示。

代碼清單 2-35

以上代碼的邏輯非常簡單,我們可以重點關注animationdrawable對象的用法,即如何使用start和stop方法控制逐幀動畫的播放和停止。

補間動畫與逐幀動畫在本質上是不同的,逐幀動畫通過連續播放圖檔來模拟動畫的效果,而補間動畫則是通過在兩個關鍵幀之間補充漸變的動畫效果來實作的。目前android應用架構支援的補間動畫效果有以下5種。具體實作在android.view.animation類庫中。

alphaanimation:透明度(alpha)漸變效果,對應标簽。

translateanimation:位移漸變,需要指定移動點的開始和結束坐标,對應标簽。

scaleanimation:縮放漸變,可以指定縮放的參考點,對應标簽。

rotateanimation:旋轉漸變,可以指定旋轉的參考點,對應标簽。

animationset:組合漸變,支援組合多種漸變效果,對應标簽。

補間動畫的效果同樣可以使用xml語言來定義,這些動畫模闆檔案通常會被放在android項目的res/anim/目錄下。比如,代碼清單2-36中就定義了一個組合式的漸變動畫效果。

代碼清單 2-36

以上補間動畫有兩個效果:首先,在1秒(1000ms)的時間内,透明度從0(完全透明)變成1(不透明);同時,大小從原先的1/10變成正常大小,縮放的中心點是元素的中心位置。假設以上動畫效果的模闆檔案名為demo_tween_anim.xml,現在我們要把該動畫效果應用到一張id為img_tween_anim的圖檔上,實作方法見代碼清單2-37。

代碼清單 2-37

在實際項目中,我們經常使用補間動畫,原因是補間動畫使用起來比較友善,功能也比逐幀動畫強大不少,而且還可以很友善地進行動畫疊加,實作更加複雜的效果。實際上,代碼清單2-36中的标簽對應的就是animationset類,即“動畫集合”的概念,支援加入多種動畫效果,如漸變動畫(alpha)、大小動畫(scale),線性動畫(translate)等。另外,在android系統中,所有與動畫相關的類都歸類在android.view.animation包之下,大家可以參考sdk文檔進行進一步學習。

至此,我們已經初步了解了如何在android系統中使用各種動畫效果,包括逐幀動畫和補間動畫。顯而易見的是,在android平台之上,開發者們可以很友善地使用各種動畫效果來為應用産品增色。此外,使用動畫效果還可以幫助我們制作出簡單的android遊戲,更多與android遊戲開發有關的内容請參考本書第13章。