Drawable Animation可以稱為幀動畫,因為它是通過每次播放一幀Drawable資源實現的。
Drawable Animation算不上真正意義上的動畫,因為它的內部實現是通過定時發送消息更新一個Drawable,
例如一個背景。所以使用這個動畫的時候更像是使用一個背景資源,只不過更新背景的動作不用我們自己進行。
也許正是因為這個原因,android官方建議我們將這個動畫資源放在drawable目錄。
使用幀動畫非常之簡單,只需要在drawable目錄定義個xml文件,
使用animation-list標簽包裹所有組成這個動畫的圖片文件,設置播放速率。
然后在java代碼中使用。
定義xml文件
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <!--每一個 item 中包括一幀組成動畫的圖片 --> <item android:drawable="@drawable/a01" android:duration="80" /> <item android:drawable="@drawable/a02" android:duration="80" /> <item android:drawable="@drawable/a03" android:duration="80" /> <item android:drawable="@drawable/a04" android:duration="80" /> <item android:drawable="@drawable/a05" android:duration="80" /> <item android:drawable="@drawable/a06" android:duration="80" /> <item android:drawable="@drawable/a07" android:duration="80" /> <item android:drawable="@drawable/a08" android:duration="80" /> <item android:drawable="@drawable/a09" android:duration="80" /> <item android:drawable="@drawable/a10" android:duration="80" /> <item android:drawable="@drawable/a11" android:duration="80" /> <item android:drawable="@drawable/a12" android:duration="80" /> <item android:drawable="@drawable/a13" android:duration="80" /> </animation-list>
這樣就定義好了我們的動畫資源,之后就是在activity中調用
package com.whathecode.drawableanimation; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.MotionEvent; import android.widget.ImageView; public class MainActivity extends ActionBarActivity { private AnimationDrawable ad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 主布局文件實際上只是一個相對布局和一個ImageView */ setContentView(R.layout.activity_main); ImageView img = (ImageView) findViewById(R.id.ali); /** * 獲取動畫資源,因為他就是一個背景資源 * 所以可以使用getBackground獲取,然后強制轉換成AnimationDrawable * 也可以這樣獲取動畫資源 * ad = (AnimationDrawable) getResources().getDrawable(R.drawable.motion); * img.setBackgroundDrawable(ad); */ img.setBackgroundResource(R.drawable.motion); ad = (AnimationDrawable)img.getBackground(); } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_UP: //播放動畫 ad.start(); return true; } return super.onTouchEvent(event); } }
這些,就是AnimationDrawable的全部