在開始實例講解之前,先引用官方文檔中的一段話: Frame動畫是一系列圖片按照一定的順序展示的過程,和放電影的機(jī)制很相似,我們稱為逐幀動畫。Frame動畫可以被定義在XML文件中,也可以完全編碼實現(xiàn)。 如果被定義在XML文件中,我們可以放置在/res下的anim或drawable目錄中(/res/[anim | drawable]/filename.xml),文件名可以作為資源ID在代碼中引用;如果由完全由編碼實現(xiàn),我們需要使用到 AnimationDrawable對象。 如果是將動畫定義在XML文件中的話,語法如下:
需要注意的是: <animation-list>元素是必須的,并且必須要作為根元素,可以包含一或多個<item>元素;android:onshot如果定義為true的話,此動畫只會執(zhí)行一次,如果為false則一直循環(huán)。 <item>元素代表一幀動畫,android:drawable指定此幀動畫所對應(yīng)的圖片資源,android:druation代表此幀持續(xù)的時間,整數(shù),單位為毫秒。 文檔接下來的示例我就不在解說了,因為接下來我們也要結(jié)合自己的實例演示一下這個過程。 我們新建一個名為anim的工程,將四張連續(xù)的圖片分別命名為f1.png,f2.png,f3.png,f4.png,放于drawable目錄,然后新建一個frame.xml文件:
然后介紹一下布局文件res/layout/frame.xml:
接下來介紹一下如何通過加載動畫定義文件來實現(xiàn)動畫的效果。我們首先會這樣寫:
出現(xiàn)這種現(xiàn)象是因為當(dāng)我們在onCreate中調(diào)用AnimationDrawable的start方法時,窗口Window對象還沒有完全初始 化,AnimationDrawable不能完全追加到窗口Window對象中,那么該怎么辦呢?我們需要把這段代碼放在 onWindowFocusChanged方法中,當(dāng)Activity展示給用戶時,onWindowFocusChanged方法就會被調(diào)用,我們正是 在這個時候?qū)崿F(xiàn)我們的動畫效果。當(dāng)然,onWindowFocusChanged是在onCreate之后被調(diào)用的,如圖:
然后我們需要重寫一下代碼:
如果在有些場合,我們需要用純代碼方式實現(xiàn)一個動畫,我們可以這樣寫:
|
|