我想拆分一个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的边界进行绘制。其余的持有人将被保留,不需要重画。

10-04 12:31