天天看点

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;

 }

}