2011-08-23 77 views
1

我一直在遇到一個奇怪的問題,試圖使用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) {} 
    } 

回答

1

SurfaceView有兩個緩衝區,這是交換每一幀,這意味着你的代碼工作,正是因爲它應該。

如果您不想重繪需要先使用其畫布繪製到bimap中的所有點,或者每幀繪製兩個點prevoius和current到surfaceview中。

+0

謝謝,我會試試看。 – Anon

+0

現在有一段時間了,令人驚歎,謝謝。它的工作非常好。 – Anon

+0

太棒了,至於速度,通常Android設備至少可以做到每秒60幀,大約16Ms。除非你在模擬器上運行它,否則你的代碼應該很慢,除非你的sleep(),否則你的代碼應該很慢。或者你的paint P是複雜的並且使用了一些位圖紋理類型的填充。 – Lumis