1

SurfaceView を使用しようとすると、奇妙な問題が発生します。このような、動作しますが、2フレーム間でちらつき続けます*。また、unlockCanvasAndPost には約 30 ~ 50 ミリ秒かかりますが、これは正常ですか?

この場合、毎回すべてを再描画することはお勧めできません。フレームごとに 350 ドットを再描画することはお勧めできません。

* 2 つのフレーム間のちらつき: フレームごとに (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) {}
   }
4

1 に答える 1

1

SurfaceView には 2 つのバッファーがあり、フレームごとにスワップされます。これは、コードが本来どおりに機能することを意味します。

すべてのドットを再描画したくない場合は、最初にキャンバスを使用してバイマップに描画するか、フレームごとに 2 つのドットを事前に描画し、現在のサーフェスビューに描画する必要があります。

于 2011-08-23T17:05:50.193 に答える