我想拆分一个SurfaceView,以更新屏幕的一部分而不是另一部分。有什么方法可以做到这一点,还是我需要做两个SurfaceView?
最佳答案
您可以使用SurfaceHolder.lockCanvas(Rect dirty)
指定表面的哪些部分将改变(哪些部分将不改变)。
假设您的程序正在如下循环中更新SurfaceHolder
:
private boolean mIsRunning;
private SurfaceHolder mHolder;
// ...
public void run() {
while (mIsrunning){
Canvas canvas = null;
synchronized (mHolder) {
try {
canvas = mHolder.lockCanvas();
doDraw(canvas);
}
finally {
if (canvas != null) {
mHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
用
SurfaceHolder.lockCanvas()
替换lockCanvas(Rect dirty)
仅会强制您以dirty
的边界进行绘制。其余的持有人将被保留,不需要重画。