什么是双缓冲?
不用画布,直接在窗口上进行绘图叫做无缓冲绘图。用了一个画布,将所有内容都先画到画布上,在整体绘制到窗口上,就该叫做单缓冲绘图,那个画布就是一个缓冲区。用了两个画布,一个进行临时的绘图,一个进行最终的绘图,这样就叫做双缓冲绘图。surfaceView通过 surfaceHolder.lockCanvas 锁定画布,实现下一张图片的绘制,再通过另外的线程刷新界面,绘制图片。
使用surfaceview步骤如下:
第一步:
继承SurfaceView并实现SurfaceHolder.Callback接口
第二步: SurfaceView.getHolder()获得SurfaceHolder对象
第三步:SurfaceHolder.addCallback(callback)添加回调函数
第四步:SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布
第五步:Canvas绘画
第六步:SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改变,将图形显示。
1.其中第二步和第三步在自定义surfaceview的构造方法中初始化。
2.第四步的可以传入一个参数矩形表示刷新的范围,矩形越小,效率越高。
3.由于双缓冲机制的原因,如果只绘制一次图可能会出现闪烁现象,因此对于绘制了就基本不需要变化的图需要绘制两遍,而对于绘制后状态
立马要改变的图是不需要绘制两遍的。
4.surfaceview实现了在子线程中 更新UI