我在尝试使用 SurfaceView 时遇到了一个奇怪的问题。喜欢this one , 它有效,但它在 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 有两个缓冲区,每帧都会交换这两个缓冲区,这意味着您的代码可以正常工作。
如果您不想重绘所有点,您需要首先使用其 Canvas 将其绘制到双图中,或者将每帧前一帧和当前帧绘制两个点到表面 View 中。
关于java - Android - 表面 View 。在不清除屏幕的情况下更新。 (注意 : I'm a Noob),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164565/