Я не правильно делаю или понимаю двойную буферизацию на Android? - PullRequest
2 голосов
/ 03 августа 2011

У меня есть функция

@Override
public void run() {
    while(running && (!eof)){
        if(surfaceHolder.getSurface().isValid()){
            Canvas canvas = surfaceHolder.lockCanvas();
            paint(canvas);
            surfaceHolder.unlockCanvasAndPost(canvas);  
        }
    }
    thread = null;
}

, где paint (canvas) вызывает кучу других функций, которые рисуют график и текст, например

canvas.drawText("Time="+myRecord.getMyTime(), 100, 100, paint);

.Имеется в том, что график и текст, которые должны постоянно меняться, не стираются, а вместо этого продолжают рисовать поверх себя.Разве весь холст не должен перерисовываться каждый раз, потому что именно так двойная буферизация работает с lock () и unlock ()?Я не правильно понимаю это?Как мне это сделать?

1 Ответ

2 голосов
/ 03 августа 2011

Вам необходимо очистить Canvas после lockCanvas () с помощью Canvas.drawColor ().

Это также может быть актуально:

Содержимое поверхности никогда не сохраняется между unlockCanvas () и lockCanvas (), по этой причине каждый пиксель в области поверхности должен быть записан.Единственное исключение из этого правила - когда указан грязный прямоугольник, и в этом случае незапятнанные пиксели будут сохранены.

Источник

...