自定義SurfaceView的一般寫法如下:
public class SurfaceViewTemplate extends SurfaceView {
private SurfaceHolder holder;//控制surfaceView的holder
private Canvas mCanvas;//與SurfaceHolder綁定的canvas,用於繪圖
private boolean isRunning;//控制線程是否運行
private Thread thread;//繪圖Thread
public SurfaceViewTemplate(Context context) {
this(context,null);
}
public SurfaceViewTemplate(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public SurfaceViewTemplate(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
holder=getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
isRunning=true;
thread=new Thread(){
@Override
public void run() {
while(isRunning){
draw();
}
}
};
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
isRunning=false;
}
});
holder.setFormat(PixelFormat.TRANSLUCENT);//設置畫布背景半透明
setZOrderOnTop(true);//設置置頂
setFocusable(true);
setFocusableInTouchMode(true);
setKeepScreenOn(true);
}
private void draw() {
try {
mCanvas=holder.lockCanvas();
if(mCanvas!=null){
//draw something
}
} finally {
holder.unlockCanvasAndPost(mCanvas);
}
}
}