Я столкнулся со странной проблемой при попытке использовать 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) {}
}