2

念のためコード例を示しますが、タイトルはそれを非常に明確に示しています。これは、AndroidSDKの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)描画する必要があると記載されていますが、でピクセルを再描画するだけでよいと記載されていますdirty。この関数に渡すことについて考えられる解釈は2つnullあります。ピクセルを再描画する必要がないか、と同じように動作しlockCanvas()ます。

4

1 に答える 1

5

オープンソースです

public Canvas lockCanvas() {
  return internalLockCanvas(null);
}
public Canvas lockCanvas(Rect dirty) {
  return internalLockCanvas(dirty);
}
于 2012-09-06T06:14:34.633 に答える