Android LunarLander示例似乎没有使用'invalidate'

时间:2011-06-08 15:57:45

标签: android

我正在研究Android示例代码中的LunarLander示例:http://developer.android.com/resources/samples/LunarLander/index.html

我很困惑,因为评论在几个地方说,代码使用'invalidate'来触发重绘。但我在代码中找不到它。

更重要的是,我认为绘图应始终在View的onDraw中进行,而不是在线程的其他位置内联。

有没有人研究过这个例子并且有关于为什么没有调用invalidate()的评论?

感谢您分享您的见解!

- Pito

1 个答案:

答案 0 :(得分:3)

它没有在Thread中内联,但它是从Thread调用的。

@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);
            }
        }
    }
}

当您进行2D图形时,应始终从线程调用图形本身...