SurfaceView
• SurfaceView是视图(View)的子类,这个视图里内嵌了一个专门用于绘制的
Surface。
• SurfaceView用到了 frontCanvas 和 backCanvas两张 Canvas, frontCanvas 用于显
示, backCanvas用于后台绘制,也就是双缓冲机制。
• 每次先使用lockCanvas()获取backCanvas,然后绘制位图,再用
unlockCanvasAndPost()把该位图提交给frontCanvas显示出来的。
• SurfaceView在UI主线程中显示,后台绘制在子线程,步骤如下:
WWW.SYSU.EDU.CN YMZHANG
4
参考
参考
1、获取SurfaceHolder对象,其是SurfaceView的内部类。添加回调监听Surface生命周期。
mSurfaceHolder = getHolder(); mSurfaceHolder.addCallback(this);
2、surfaceCreated 回调后启动绘制线程只有当native层的Surface创建完毕之后,才可以调
用lockCanvas(),否则失败。
@Override
public void surfaceCreated(SurfaceHolder holder) {
mDrawThread = new DrawThread(); mDrawThread.start();
}
3、绘制
Canvas canvas = mSurfaceHolder.lockCanvas();
// 使用canvas绘制内容 ...
mSurfaceHolder.unlockCanvasAndPost(canvas);