效果图

public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private SurfaceHolder sfh;
private Paint paint;
private Thread th;
private boolean flag;
private Canvas canvas;
private int screenW, screenH;
private PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
/**
* SurfaceView初始化函数
*/
public MySurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setColor(Color.WHITE);
setFocusable(true);
}
/**
* SurfaceView视图创建,响应此函数
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
screenW = this.getWidth();
screenH = this.getHeight();
flag = true;
th = new Thread(this);
th.start();
}
/**
* 游戏绘图
*/
public void myDraw() {
try {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.setDrawFilter(pfd);
canvas.drawColor(Color.BLACK);
canvas.drawText("drawText", 10, 10, paint);
canvas.drawPoint(10, 20, paint);
canvas.drawPoints(new float[] { 10, 30, 30, 30 }, paint);
canvas.drawLine(10, 40, 50, 40, paint);
canvas.drawLines(new float[] { 10, 50, 50, 50, 70, 50, 110, 50 }, paint);
canvas.drawRect(10, 60, 40, 100, paint);
Rect rect = new Rect(10, 110, 60, 130);
canvas.drawRect(rect, paint);
canvas.drawRect(rect, paint);
RectF rectF = new RectF(10, 140, 60, 170);
canvas.drawRoundRect(rectF, 20, 20, paint);
canvas.drawCircle(20, 200, 20, paint);
canvas.drawArc(new RectF(150, 20, 200, 70), 0, 230, true, paint);
canvas.drawOval(new RectF(150, 80, 180, 100), paint);
Path path = new Path();
path.moveTo(160, 150);
path.lineTo(200, 150);
path.lineTo(180, 200);
path.close();
canvas.drawPath(path, paint);
Path pathCircle = new Path();
pathCircle.addCircle(130, 260, 20, Path.Direction.CCW);
canvas.drawTextOnPath("PathText", pathCircle, 10, 20, paint);
}
} catch (Exception e) {
} finally {
if (canvas != null)
sfh.unlockCanvasAndPost(canvas);
}
}
/**
* 触屏事件监听
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
/**
* 按键事件监听
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
/**
* 游戏逻辑
*/
private void logic() {
}
@Override
public void run() {
while (flag) {
long start = System.currentTimeMillis();
myDraw();
logic();
long end = System.currentTimeMillis();
try {
if (end - start < 50) {
Thread.sleep(50 - (end - start));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* SurfaceView视图状态发生改变,响应此函数
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
/**
* SurfaceView视图消亡时,响应此函数
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false;
}
}