Как работает анимация на 60 Гц? - PullRequest
1 голос
/ 09 августа 2011

Я использую тему, чтобы сделать прокрутку под Android. Метод выполнения потока является классическим. Я взял это в интернете На мой взгляд это SurfaceView.

public void run() {
    Canvas canvas = null;
    while (_run) {
        canvas = _surfaceHolder.lockCanvas();
        if (canvas != null) {
            _surface.doDraw(canvas);
            _surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }
}

Что я не понимаю, так это: Почему doDraw (который будет рисовать на экране) вызывается ровно 60 раз в секунду? И почему нет проблемы с синхронизацией?

Я не знаю, как работает ЖК-дисплей, но на экране, если вы выполняете прокрутку, не дожидаясь синхронизации экрана, возможно, что в верхней части экрана отображается предыдущее изображение, а в нижней части отображается правильное изображение. У меня нет проблемы на Android.

Является ли SurfaceView обработкой типа двойной буферизации? А если это так, когда флип сделан?

Я не нахожу никакой информации об этом в Интернете!

Спасибо-х Etienne

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Это действительно двойная буферизация, переворот выполняется в SurfaceHolder.unlockCanvasAndPost ().

Проверьте это: http://developer.android.com/reference/android/view/SurfaceHolder.html#unlockCanvasAndPost(android.graphics.Canvas)

[Редактировать] Извините, забыл свой первый вопрос.

В Android всегда включен vsync, и поэтому lockCanvas () или unlockCanvasAndPost () заблокируют оставшееся время для его синхронизации.Я не знаю, в моей голове, блокирует ли это lockCanvas () или unlockCanvasAndPost (), но это должно быть достаточно просто, чтобы проверить, нужно ли вам это.

0 голосов
/ 06 апреля 2012

Как минимум на Android 2.3, SGS, блокировка в lockCanvas().Я измерил это, позвонив System.nanoTime() до и после этого звонка.

...