Android - SurfaceView。无需清除屏幕即可更新。 (注:我是Noob)
问题描述:
我一直在遇到一个奇怪的问题,试图使用SurfaceView。像this one一样,它可以工作,但它在2帧*之间保持闪烁。此外,unlockCanvasAndPost大约30-50Ms,这是正常的吗?Android - SurfaceView。无需清除屏幕即可更新。 (注:我是Noob)
每次重绘所有内容在这种情况下不是一个好主意,我不认为每帧重绘350个点是个好主意。 *两帧之间闪烁:假设我在(X,X)的每一帧画一个点,X是帧号。 我会看到点1,3 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有两个缓冲区,这是交换每一帧,这意味着你的代码工作,正是因为它应该。
如果您不想重绘需要先使用其画布绘制到bimap中的所有点,或者每帧绘制两个点prevoius和current到surfaceview中。
谢谢,我会试试看。 – Anon
现在有一段时间了,令人惊叹,谢谢。它的工作非常好。 – Anon
太棒了,至于速度,通常Android设备至少可以做到每秒60帧,大约16Ms。除非你在模拟器上运行它,否则你的代码应该很慢,除非你的sleep(),否则你的代码应该很慢。或者你的paint P是复杂的并且使用了一些位图纹理类型的填充。 – Lumis