Android繪圖動畫—Drawable Animation

繪圖動畫會讓你依次的加載一系列的繪圖資源來創建一個動畫。這種動畫是一種傳統動畫,它是用不同的圖片序列來創建並依次播放的,看上去像放電影。AnimationDrawable類是繪圖動畫的基類。

你能夠使用AnimationDrawable類的API在代碼中定義動畫的幀,但是,用一個單獨的定義瞭組成動畫幀的列表的XML來完成動畫會更加簡單。這種類型動畫的XML文件要放在你的Android工程的res/drawable/目錄中。這種情況下,指令是動畫的播放順序和每一幀動畫的播放時間。
這個動畫XML文件是由一個<animation-list>根元素和一系列的定義每一幀的<item>子元素組成。<item>元素定義瞭每一幀的繪圖資源和播放時長。以下是繪圖動畫的一個示例XML文件:

<animation-list xmlns:android="https://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系統調用。

 作者:FireOfStar
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *