Closed lixplor closed 7 years ago
SurfaceView内部有2个或3个缓冲区, 每次调用surfaceHolder.lockCanvas()
时, 获取缓冲区的Canvas
对象, 绘制后调用surfaceHolder.unlockCanvasAndPost(canvas)
将数据写入缓冲区, 同时会更换为下一个缓冲区显示, 所以每次绘制的内容是分别存在于不同缓冲区的. 如果绘制较慢(比如每次都绘制整个画布), 则由于单次绘制时间较长, 则会显示出缓冲区交替的闪烁.
解决方法:
surfaceHolder.lockCanvas(dirtyRect)
, 计算出要绘制的区域的矩形, 每次只更新这个区域, 可以提升绘制速度, 速度快则看不出闪烁
SurfaceView在绘制时, 之前绘制的内容会闪烁