Пример Android LunarLander, похоже, не использует «invalidate» - PullRequest
1 голос
/ 08 июня 2011

Я изучаю пример LunarLander в примере кода Android: http://developer.android.com/resources/samples/LunarLander/index.html

Я озадачен, потому что в нескольких местах комментарии говорят, что код использует «invalidate» для запуска перерисовки.Но я не могу найти его в коде.

Что еще более важно, я считаю, что рисование всегда должно происходить в onDraw View, а не inline в другом месте потока.

Кто-нибудь изучал этот пример и получил комментарии о том, почему не вызывается invalidate ()?

Спасибо за то, что поделились своими мыслями!

- Pito

1 Ответ

3 голосов
/ 08 июня 2011

Он не встроен в поток, но вызывается из потока.

@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-графики ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...