Android - SurfaceView. Обновление БЕЗ очистки экрана. (Примечание: я нуб) - PullRequest
1 голос
/ 23 августа 2011

Я столкнулся со странной проблемой, пытаясь использовать SurfaceView. Как этот , он работает, но продолжает мерцать между 2 кадрами *. Кроме того, unlockCanvasAndPost занимает около 30-50Ms, это нормально?

Перерисовка всего, что происходит каждый раз, НЕ является хорошей идеей в этом случае, я не думаю, что перерисовка 350 точек в каждом кадре является хорошей идеей.

* Мерцание между двумя кадрами: допустим, я рисую точку в каждом кадре в точке (X, X), где X обозначает номер кадра. Я буду видеть точки 1,1 3,3 5,5 7,7 9,9, показывающие каждый ослабленный кадр, и точки 2,2 4,4 6,6 8,8, показывающие каждый кадр пары.

Вот код, который рисует:

   Canvas C;
   while(running)
   {

       synchronized (mSurfaceHolder) 
       {
       DoCalc(); //Doesn't do anything special. changes vars X1 and Y1
       C=mSurfaceHolder.lockCanvas();
       aDraw(C); // Only contains canvas.drawRect(X1-1, Y1-1, X1+1,Y1+1, P);
       mSurfaceHolder.unlockCanvasAndPost(C); //Why does it take so long?
       }

    try {Thread.sleep(500);} //Temporary delay. 
    catch (InterruptedException e) {}
   }

1 Ответ

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

SurfaceView имеет два буфера, которые меняются местами в каждом кадре, что означает, что ваш код работает точно так, как должен.

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

...