SurfaceView在开发Android游戏程序时,使用的频率很高,下面将其模板代码放出:
package org.once.game;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements SurfaceHolder.Callback,
Runnable {
private SurfaceHolder sh;
private Canvas canvas;
private boolean isRun = true;
private float radius = 10;
public GameView(Context context) {
super(context);
sh = this.getHolder();
sh.addCallback(this);
}
public void run() {
while (isRun) {
draw();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 该方法中完成游戏物体的绘制
*/
private void draw() {
//此处的异常处理比较诡异,其实很合理
//当surfaceView被销毁的时,先销毁的是canvas,然后才是sh
try {
if (sh != null) {
canvas = sh.lockCanvas();
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(5);
canvas.drawCircle(200, 100, radius++, paint);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null)
sh.unlockCanvasAndPost(canvas);
}
}
public void surfaceCreated(SurfaceHolder holder) {
new Thread(this).start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
isRun = false;
}
}