SurfaceView模版

来源:互联网 发布:淘宝网游交易平台 编辑:程序博客网 时间:2024/05/15 23:52
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@Overridepublic void surfaceCreated(SurfaceHolder holder) {    isDrawing=true;//在surfaceCreated中设置isDrawing为真    new Thread(this).start();    Log.v("meee","开始");}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {    isDrawing=false;//关闭绘制标志位    Log.v("meee","结束");}//Runnable//在这里进行性能优化,通常取值为50-100,这里取的是100@Overridepublic 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锁    }}}