public class SurfaceViewDemo extends SurfaceView implements Runnable,SurfaceHolder.Callback{
//需要三个成员变量
SurfaceHolder mHolder;
Canvas mCanvas;
boolean isDrawing;
//需要实现三个构造器
public SurfaceViewDemo(Context context) {
super(context);
init();
}
public SurfaceViewDemo(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SurfaceViewDemo(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
//初始化
public void init() {
mHolder=getHolder();
mHolder.addCallback(this);
setFocusable(true);
setFocusableInTouchMode(true);//为true,该视图可以获取触摸事件
this.setKeepScreenOn(true);//保持屏幕打开
}
//Holder
@Override
public void surfaceCreated(SurfaceHolder holder) {
isDrawing=true;//在surfaceCreated中设置isDrawing为真
new Thread(this).start();
Log.v("meee","开始");
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
isDrawing=false;//关闭绘制标志位
Log.v("meee","结束");
}
//Runnable
//在这里进行性能优化,通常取值为50-100,这里取的是100
@Override
public void run() {
while(isDrawing){
long startTime =System.currentTimeMillis();
Log.v("meee","startTime"+startTime);
draw();
long endTime =System.currentTimeMillis();
Log.v("meee","endTime"+endTime);
if ((endTime-startTime)<100){
try {
Thread.sleep(100-(endTime-startTime));
Log.v("meee","睡眠:"+(100-(endTime-startTime)));
} catch (InterruptedException e) {
}
}
}
}
//绘图
public void draw(){
try {
mCanvas=mHolder.lockCanvas();//通过mholder.lockCanvas()来获取canvas对象
}catch (Exception e){
}finally {
mHolder.unlockCanvasAndPost(mCanvas);//需要在finally中通过Holder.unlockCanvasAndPost(Canvas)解除canvas锁
}
}
}
SurfaceView模版

最新推荐文章于 2021-07-16 16:22:55 发布
