import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Callback {
private SurfaceHolder holder;// 回调处理
private MySurfaceViewThread mySurfaceViewThread;
private boolean hasSurface;
public MySurfaceView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}
private void init() {
// TODO Auto-generated method stub
// 创建一个新的SurfaceHolder, 并分配这个类作为它的回调(callback)
holder = getHolder();
holder.addCallback(this);
hasSurface = false;
}
public void resume() {
// 创建和启动图像更新线程
if (mySurfaceViewThread == null) {
mySurfaceViewThread = new MySurfaceViewThread();
if (hasSurface == true)
mySurfaceViewThread.start();
}
}
// 内部类:
public class MySurfaceViewThread extends Thread {
private boolean done;
MySurfaceViewThread() {
super();
done = false;
}
@Override
public void run() {
SurfaceHolder surfaceHolder = holder;
// 重复绘图循环,直到线程停止
while (!done) {
// 锁定surface,并返回到要绘图的Canvas
Canvas canvas = surfaceHolder.lockCanvas();
// 待实现:在Canvas上绘图
// 解锁Canvas,并渲染当前图像
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
public void requestExitAndWait() {
// 把这个线程标记为完成,并合并到主程序线程
done = true;
try {
join();
} catch (InterruptedException ex) {
}
}
public void onWindowResize(int w, int h) {
// 处理可用的屏幕尺寸的改变
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// TODO Auto-generated method stub
if (mySurfaceViewThread != null)
mySurfaceViewThread.onWindowResize(w, h);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
// resume();
hasSurface = true;
if (mySurfaceViewThread != null)
mySurfaceViewThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
hasSurface = false;
pause();
}
private void pause() {
// TODO Auto-generated method stub
// 杀死图像更新线程
if (mySurfaceViewThread != null) {
mySurfaceViewThread.requestExitAndWait();
mySurfaceViewThread = null;
}
}
}
实现这个surfaceView的activity类:
import android.app.Activity;
import android.os.Bundle;
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
}
写这个主要是前面用了一个SurfaceView,所有这里再单独学习下这个视图,
原文地址:http://www.cnblogs.com/qinjunni/archive/2012/02/24/2366392.html