Android应用开发揭秘的第22,23个程序5_17_frame,5_18_framexml修改版和高仿版的源码注释

来源:互联网 发布:linux chgrp命令 编辑:程序博客网 时间:2024/06/08 20:03

//frame动画方式

//Activity01.java

package com.frame;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

public class Activity01 extends Activity
{
 private GameView mGameView;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  
  mGameView = new GameView(this);
  
  setContentView(mGameView);
 }
 
 public boolean onKeyUp(int keyCode, KeyEvent event)
 {
  if ( mGameView == null )
  {
   return false;
  }
  mGameView.onKeyUp(keyCode,event);
  return true;
 }
 public boolean onKeyDown(int keyCode, KeyEvent event)
 {
  if ( mGameView == null )
  {
   return false;
  }
  if ( keyCode ==  KeyEvent.KEYCODE_BACK)
  {
   this.finish();
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
}

 

//GameView.java

package com.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
{
 /* 定义AnimationDrawable动画 */
 private AnimationDrawable frameAnimation = null;
 Context      mContext  = null;
 
 /* 定义一个Drawable对象 */
 Drawable    mBitAnimation    = null;
 public GameView(Context context)
 {
  super(context);
  
  mContext = context;
  
  /* 实例化AnimationDrawable对象 */
  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);
  }
  
  /* 设置播放模式是否循环false表示循环而true表示不循环 */
  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;
 }
}

 

//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>

 

//GameView.java  xml

package com.framexml;

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
{
 /* 定义AnimationDrawable动画对象 */
 private AnimationDrawable frameAnimation = null;
 Context      mContext  = null;
 public GameView(Context context)
 {
  super(context);
  
  mContext = context;
  
  /* 定义一个ImageView用来显示动画 */
  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;
 }
}

 

//gfframe 一样代码.