本文譯自:http://developer.android.com/guide/topics/graphics/drawable-animation.html
繪圖動畫會讓你依次的載入一系列的繪圖資源來建立一個動畫。這種動畫是一種傳統動畫,它是用不同的圖片序列來建立並依次播放的,看上去像放電影。AnimationDrawable類是繪圖動畫的基類。
你能夠使用AnimationDrawable類的API在代碼中定義動畫的幀,但是,用一個單獨的定義了組成動畫幀的列表的XML來完成動畫會更加簡單。這種類型動畫的XML檔案要放在你的Android工程的res/drawable/目錄中。這種情況下,指令是動畫的播放順序和每一幀動畫的播放時間。
這個動畫XML檔案是由一個<animation-list>根項目和一系列的定義每一幀的<item>子項目組成。<item>元素定義了每一幀的繪圖資源和播放時間長度。以下是繪圖動畫的一個樣本XML檔案:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
這個動畫只有三個幀。通過把第一幀動畫的android:oneshot屬性設定為true,讓動畫播放一次,然後在最後一幀停止。如果它被設定為false,那麼動畫將會迴圈播放。使用這個儲存在工程的res/drawable/目錄中的rocket_thrust.xml檔案,能夠把一個背景圖片添加到一個View對象上,然後播放動畫。下面樣本的Activity動畫中添加了一個ImageView對象,並且在螢幕被觸摸時動畫開始播放:
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
注意,在Activity的onCreate()方法執行期間,不能調用AnimationDrawable對象上的start()方法,這是至關重要的,因為AnimationDrawable對象在這時還沒有跟視窗綁定。如果要立即播放動畫,不需要互動,你可以在Activity的onWindowFocusChanged()回調方法中調用star()方法,onWindowFocusChanged()方法會在視窗擷取焦點時被Android系統調用。
關於XML文法、可用的標籤屬性的更多資訊,請看“動畫資源”(http://developer.android.com/guide/topics/resources/animation-resource.html)