天天看點

Android Frame動畫執行個體

具體的上一章已經介紹,直接上代碼:

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.drawable.AnimationDrawable;

import android.graphics.drawable.Drawable;

import android.view.KeyEvent;

import android.view.View;

public class GameView extends View

{

 private AnimationDrawable frameAnimation = null;

 Context      mContext  = null;

 Drawable    mBitAnimation    = null;

 public GameView(Context context)

 {

  super(context);

  mContext = context;

  frameAnimation = new AnimationDrawable();

  //這裡用一個循環了裝載所有名字類似的資源

  //如“a1.......15.png”的圖檔

  //這個方法用處非常大

  for (int i = 1; i <= 15; i++)

  {

   int id = getResources().getIdentifier("a" + i, "drawable", mContext.getPackageName());

   mBitAnimation = getResources().getDrawable(id);

   //參數mBitAnimation是該幀的圖檔

   //參數500是該幀顯示的時間,按毫秒計算

   frameAnimation.addFrame(mBitAnimation, 500);

  }

  frameAnimation.setOneShot( false ); 

  this.setBackgroundDrawable(frameAnimation);

 }

 public void onDraw(Canvas canvas)

 {

  super.onDraw(canvas);

 }

 public boolean onKeyUp(int keyCode, KeyEvent event)

 {

  switch ( keyCode )

  {

  case KeyEvent.KEYCODE_DPAD_UP:  

   frameAnimation.start();

   break;

  }

  return true;

 }

}

Xml實作:

res/anim/frameanimation.xml :

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">

    <item android:drawable="@drawable/a1" android:duration="500" />

    <item android:drawable="@drawable/a2" android:duration="500" />

    <item android:drawable="@drawable/a3" android:duration="500" />

    <item android:drawable="@drawable/a4" android:duration="500" />

    <item android:drawable="@drawable/a5" android:duration="500" />

    <item android:drawable="@drawable/a6" android:duration="500" />

    <item android:drawable="@drawable/a7" android:duration="500" />

    <item android:drawable="@drawable/a8" android:duration="500" />

    <item android:drawable="@drawable/a9" android:duration="500" />

    <item android:drawable="@drawable/a10" android:duration="500" />

    <item android:drawable="@drawable/a11" android:duration="500" />

    <item android:drawable="@drawable/a12" android:duration="500" />

    <item android:drawable="@drawable/a13" android:duration="500" />

    <item android:drawable="@drawable/a14" android:duration="500" />

    <item android:drawable="@drawable/a15" android:duration="500" />     

</animation-list>

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.drawable.AnimationDrawable;

import android.view.KeyEvent;

import android.view.View;

import android.widget.ImageView;

public class GameView extends View

{

 private AnimationDrawable frameAnimation = null;

 Context      mContext  = null;

 public GameView(Context context)

 {

  super(context);

  mContext = context;

  ImageView img = new ImageView(mContext);

  img.setBackgroundResource(R.anim.frameanimation);  

  frameAnimation = (AnimationDrawable) img.getBackground();

  frameAnimation.setOneShot( false ); 

  this.setBackgroundDrawable(frameAnimation);

 }

 public void onDraw(Canvas canvas)

 {

  super.onDraw(canvas);

 }

 public boolean onKeyUp(int keyCode, KeyEvent event)

 {

  switch ( keyCode )

  {

  case KeyEvent.KEYCODE_DPAD_UP: 

   frameAnimation.start();

   break;

  }

  return true;

 }

}