Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習之逐幀動畫

Android學習之逐幀動畫

編輯:關於Android編程

動畫分為逐幀動畫(Frame)、補間動畫(Tween) 和屬性動畫。

1、逐幀動畫

通常采用XML資源文件進行定義,如下:

android:oneshot 設置是否循環播放動畫,false為循環播放為默認的設置,xml文件定義幀動畫資源,在程序中用一個ImageView就可以顯示該動畫了。

需要指出的是AnimationDrawable代表的動畫默認是不播放的,需要在程序中啟動,調用start() 和 stop() .




	
	
	
	
	
	

子彈爆炸效果實例

import java.lang.reflect.Field;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.ImageView;

public class Blast extends Activity
{
	private MyView myView;
	private AnimationDrawable anim;
	private MediaPlayer bomb;
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		// 使用FrameLayout布局管理器,它允許組件自己控制位置
		FrameLayout frame = new FrameLayout(this);
		setContentView(frame);
		// 設置使用背景
		frame.setBackgroundResource(R.drawable.back);
		// 加載音效
		bomb = MediaPlayer.create(this, R.raw.bomb);
		myView = new MyView(this);
		// 設置myView用於顯示blast動畫
		myView.setBackgroundResource(R.anim.blast);
		// 設置myView默認為隱藏
		myView.setVisibility(View.INVISIBLE);
		// 獲取動畫對象
		anim = (AnimationDrawable) myView.getBackground();
		frame.addView(myView);
		frame.setOnTouchListener(new OnTouchListener()
		{
			public boolean onTouch(View source, MotionEvent event)
			{
				// 只處理按下事件(避免每次產生兩個動畫效果)
				if (event.getAction() == MotionEvent.ACTION_DOWN)
				{	// 先停止動畫播放
					anim.stop();
					float x = event.getX();
					float y = event.getY();
					// 控制myView的顯示位置
					myView.setLocation((int) y - 40, (int) x - 20);
					myView.setVisibility(View.VISIBLE);
					// 啟動動畫
					anim.start();
					// 播放音效
					bomb.start();
				}
				return false;
			}
		});
	}
	// 定義一個自定義View,該自定義View用於播放“爆炸”效果
	class MyView extends ImageView
	{
		public MyView(Context context)
		{
			super(context);
		}
		// 定義一個方法,該方法用於控制MyView的顯示位置
		public void setLocation(int top, int left)
		{
			this.setFrame(left, top, left + 40, top + 40);
		}
		// 重寫該方法,控制如果動畫播放到最後一幀時,隱藏該View
		protected void onDraw(Canvas canvas) 
		{
			try
			{
				Field field = AnimationDrawable.class.getDeclaredField("mCurFrame");
				field.setAccessible(true);
				// 獲取anim動畫的當前幀
				int curFrame = field.getInt(anim);
				// 如果已經到了最後一幀
				if (curFrame == anim.getNumberOfFrames() - 1)
				{
					// 讓該View隱藏
					setVisibility(View.INVISIBLE);
				}
			}
			catch (Exception e)
			{
			}
			super.onDraw(canvas);
		}
	}
}
blast.xml




	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved