2011-08-23 9 views
1

SurfaceViewを使ってみると奇妙な問題に遭遇しました。 this oneと同様に動作しますが、2フレーム間で点滅し続けます*。また、unlockCanvasAndPostは30-50Msを取ります。これは正常ですか?Android - SurfaceView。画面を消去せずに更新しています。 (注:私はNoobです)

毎回全てを再描画するのは良い考えではありませんが、フレームごとに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) {} 
    } 

答えて

1

SurfaceViewは、あなたのコードは正確にそれが必要として動作を意味し、フレームごとに入れ替えている2つのバッファを持っています。

最初にキャンバスを使用してbimapに描画する必要があるすべての点を再描画したくない場合や、フレームごとに2つのドットを描画し、現在の面図に描画する必要がない場合。

+0

ありがとう、私はそれを試してみましょう。 – Anon

+0

今すぐにやり遂げる時間を見つけました、すばらしい、ありがとう。それは本当にうまくいく。 – Anon

+0

偉大な...速度に関しては、通常アンドロイドデバイスは約16Msである秒当たり少なくとも60フレームを行うことができます。あなたのエミュレータでペイントPを実行していないか、複雑なビットマップテクスチャタイプの塗りつぶしを使用していない限り、あなたのコードがあなたのsleep()を除いて遅くなるべき理由を見ることができません。 – Lumis

関連する問題