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

1

У меня возникла странная проблема с использованием 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) {}
   }
Теги:
surfaceview
clear
surfaceholder

1 ответ

1

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

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

  • 0
    Спасибо, я попробую это.
  • 0
    Нашел время, чтобы сделать это сейчас, удивительно, спасибо. Это работает действительно хорошо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню