2011-06-30 6 views
5

これを行うにはどうすればよいですか?誰かに私に概要を教えてもらえますか?私は、オンラインで見つけたもの、それは私の実行中のように思えるからキャンバスと表面ビューを使用したAndroid上のJavaでのダブルバッファリング

()関数:

  1. ビットマップ
  2. (キャンバスを作成し、ビットマップに
  3. lockCanvasをそれを添付を作成します)
  4. コールドロー(キャンバス)とバックバッファにビットマップを描画(どのように??)
  5. unlockCanvasAndPost()

これは正しいですか?もしそうなら、私は少し説明を得ることができます。これらのステップは何を意味し、どのように実装するのですか?私はAndroidのためにプログラミングされたことはないので、私は本当のノブです。それが正しいのではない場合、どうすればいいですか?

答えて

16

これは既にダブルバッファされているため、unlockCanvasAndPost()呼び出しが実行します。ビットマップを作成する必要はありません。

+0

私はそれを得ていません。だから、私はロックとロック解除の間に必要なものをすべて描画し、ダブルバッファリングはそれ自身で発生しますか?私がロックする前に描く必要はありませんか?申し訳ありませんが、私はこれを可能な最も基本的な方法で説明する必要があります... – Kalina

+7

@TheBeatlemaniac: 'LockCanvas()'が呼び出された後に 'Canvas'を描画するとき、 *現在の*フレームが表示されている間に表示されます。 'unlockCanvasAndPost()'コールは、更新された 'Canvas'を表示するために、現在のフレームバッファで次のフレームバッファを切り替えます。 – Wroclai

+0

ビットマップ部分は、ズームイン/ズームアウトしたり、 "ワーススペース"を動かしたい場合に便利です。 – TheRealChx101

2

Android Developers Groupの手順では、すべてのレンダリングが描画されるバッファキャンバスが必要であると言います。

Bitmap buffCanvasBitmap; 
Canvas buffCanvas; 

// Creating bitmap with attaching it to the buffer-canvas, it means that all the changes // done with the canvas are captured into the attached bitmap 
tempCanvasBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
tempCanvas = new Canvas(); 
tempCanvas.setBitmap(tempCanvasBitmap); 

// and then you lock main canvas 
canvas = getHolder().lockCanvas();    
// draw everything you need into the buffer 
tempCanvas.drawRect.... // and etc 
// then you draw the attached bitmap into the main canvas 
canvas.drawBitmap(tempCanvasBitmap, 0, 0, drawView.getPaint()); 
// then unlocking canvas to let it be drawn with main mechanisms 
getHolder().unlockCanvasAndPost(canvas); 

各ホルダーのロックに異なるダブルバッファーキャンバスを取得せずにメインバッファーを取得しています。

関連する問題