Андроид — Surface View. Обновление БЕЗ очистки экрана. (Примечание: я нуб)

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

В этом случае перерисовывать все каждый раз НЕ является хорошей идеей, я не думаю, что перерисовывать 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) {}
   }

person Anon    schedule 23.08.2011    source источник


Ответы (1)


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

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

person Lumis    schedule 23.08.2011
comment
Нашел немного времени, чтобы сделать это сейчас, потрясающе, спасибо. Это работает очень хорошо. - person Anon; 23.08.2011
comment
Отлично... что касается скорости, обычно устройство Android может делать не менее 60 кадров в секунду, что составляет около 16 Мс. Я не вижу причин, по которым ваш код должен быть медленным, за исключением вашего sleep(), если вы не запускаете его на эмуляторе или ваша краска P сложна и использует какой-либо тип заливки растровой текстуры. - person Lumis; 24.08.2011