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中。

+0

谢谢,我会试试看。 – Anon

+0

现在有一段时间了,令人惊叹,谢谢。它的工作非常好。 – Anon

+0

太棒了,至于速度,通常Android设备至少可以做到每秒60帧,大约16Ms。除非你在模拟器上运行它,否则你的代码应该很慢,除非你的sleep(),否则你的代码应该很慢。或者你的paint P是复杂的并且使用了一些位图纹理类型的填充。 – Lumis