|
SurfaceView在Android中用作游戲開發是最適宜的,本文就將演示游戲開發中常用的兩種繪圖刷新策略在SurfaceView中的實現方法。
首先我們來看一下本例需要用到的兩個素材圖片:
question.png是一個半透明的圖像,我們希望將它放在上面,圍繞其圓心不斷旋轉。
實現代碼如下:
package SkyD.SurfaceViewTest;
import Android.app.Activity;
import Android.content.Context;
import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.graphics.Canvas;
import Android.graphics.Matrix;
import Android.graphics.Paint;
import Android.os.Bundle;
import Android.view.SurfaceHolder;
import Android.view.SurfaceView;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
// 自定義的SurfaceView子類
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
// 背景圖
private Bitmap BackgroundImage;
// 問號圖
private Bitmap QuestionImage;
SurfaceHolder Holder;
public MySurfaceView(Context context) {
super(context);
BackgroundImage = BitmapFactory.decodeResource(getResources(),
R.drawable.bg);
QuestionImage = BitmapFactory.decodeResource(getResources(),
R.drawable.question);
Holder = this.getHolder();// 獲取holder
Holder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 啟動自定義線程
new Thread(new MyThread()).start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
// 自定義線程類
class MyThread implements Runnable {
@Override
public void run() {
Canvas canvas = null;
int rotate = 0;// 旋轉角度變量
while (true) {
try {
canvas = Holder.lockCanvas();// 獲取畫布
Paint mPaint = new Paint();
// 繪制背景
canvas.drawBitmap(BackgroundImage, 0, 0, mPaint);
// 創建矩陣以控制圖片旋轉和平移
Matrix m = new Matrix();
// 設置旋轉角度
m.postRotate((rotate += 48) % 360,
QuestionImage.getWidth() / 2,
QuestionImage.getHeight() / 2);
// 設置左邊距和上邊距
m.postTranslate(47, 47);
// 繪制問號圖
canvas.drawBitmap(QuestionImage, m, mPaint);
// 休眠以控制最大幀頻為每秒約30幀
Thread.sleep(33);
} catch (Exception e) {
} finally {
Holder.unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的圖像
}
}
}
}
}
}
it知識庫:Android SurfaceView 繪圖覆蓋刷新及臟矩形刷新方法,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。