Android:lockCanvas() 和 lockCanvas(null) 有什么区别?

标签 android surfaceview

标题说得很清楚,不过为了以防万一,我会给出一个代码示例。这是来自 Android SDK 中的 LunarLander 示例:

    @Override
    public void run() {
        while (mRun) {
            Canvas c = null;
            try {
                c = mSurfaceHolder.lockCanvas(null);
                synchronized (mSurfaceHolder) {
                    if (mMode == STATE_RUNNING) updatePhysics();
                    doDraw(c);
                }
            } finally {
                // do this in a finally so that if an exception is thrown
                // during the above, we don't leave the Surface in an
                // inconsistent state
                if (c != null) {
                    mSurfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }

lockCanvas() 的文档说必须重新绘制所有像素,而 lockCanvas(Rect dirty) 说您只需要重新绘制像素。我看到将 null 传递给此函数有两种可能的解释:它不需要重新绘制任何像素,或者其行为方式与 lockCanvas() 相同。

最佳答案

它是开源的

public Canvas lockCanvas() {
  return internalLockCanvas(null);
}
public Canvas lockCanvas(Rect dirty) {
  return internalLockCanvas(dirty);
}

关于Android:lockCanvas() 和 lockCanvas(null) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293835/

相关文章:

java - 实现 USSD 功能。将服务绑定(bind)到 PhoneUtils 而无需在每次更新时重新启动手机

java - Android JNI C++ 代码始终获取 2 个不同 SurfaceView 对象的 "same"jobject 值

android - surfaceview 上的 Drawtext 仅适用于模拟器,但不适用于设备

Android:在同一个SurfaceView中录制和播放视频

android - ListView 多选问题?

android - 如何通过 adb 在连接的设备之一上安装 apk?

android - 如何在 fragment 中实现按钮 SetOnClickListener?

android - 在 strings.xml 中列出值

android - 如何使surfaceview透明

android - 动画在 SurfaceView 中不起作用