android自定義View播放Frame動畫

1、動畫圖片

將4張連續的動畫圖片分別取名爲img_a0...img_a3,然後拷貝到項目的res-drawable中

2、MainActivity.java類

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Canvas;

類的實現

public class MainActivity extends Activity {
	private final static int ANIM_COUNT = 4; 	//	總共的圖片數
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new FrameView(this));
	}

<span style="white-space:pre">	</span>//<span style="white-space:pre">	</span>自定義View
	class FrameView extends View {
		Bitmap[]bitmap = new Bitmap[ANIM_COUNT];
		Bitmap bitmapDisplay = null;
		Paint paint = null;
		long startTime = 0;
		int nPlayId = 0;
		
		//	構造函數
		public FrameView (Context context) {
			super(context);
			//	加載圖片
			for(int i = 0; i < ANIM_COUNT; i++) {
				bitmap[i] = BitmapFactory.decodeResource(this.getResources(), R.drawable.img_a0+i);
			}
			bitmapDisplay = bitmap[0];
			paint = new Paint();
			startTime = System.currentTimeMillis();
		}
		
		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			canvas.drawColor(Color.BLACK);
			
			paint.setColor(Color.WHITE);
			paint.setTextSize(18);
			canvas.drawText("動畫播放中...", 80, 30, paint);
			
			//	500毫秒換一次圖
			long nowTime = System.currentTimeMillis();
			if (nowTime-startTime > 500) {
				startTime = nowTime;
				nPlayId++;
				if (nPlayId >= ANIM_COUNT) {
					nPlayId = 0;
				}
				bitmapDisplay = bitmap[nPlayId];
			}
			
			//	顯示圖片
			canvas.drawBitmap(bitmapDisplay, 80, 80, paint);
			invalidate();
		}
	}
}

3、效果圖

效果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章