2011-06-30 66 views
5

人們如何去做這件事?有人可以給我一個大綱嗎?Android上的Java雙緩衝與畫布和表面視圖

從我在網上找到的,好像在我的run()函數:

  1. 創建位圖
  2. 創建畫布並將其連接到該位圖
  3. lockCanvas()
  4. 呼叫平局(畫布)和位圖繪製到後臺緩衝區(如何?)
  5. unlockCanvasAndPost()

這是正確的嗎?如果是這樣,我能否得到一點解釋;這些步驟意味着什麼?我如何實施它們?我從來沒有爲Android編程過,所以我是一個真正的小菜鳥。如果不正確,我該怎麼做?

回答

16

它已經被雙緩衝,這就是unlockCanvasAndPost()調用的功能。沒有必要創建一個位圖。

+0

我不太明白。所以,我只需在鎖定和解鎖之間繪製所需的所有內容......雙緩衝發生在它自己的位置上?我不需要在鎖定之前繪製?對不起,我需要用最基本的方式解釋這個... – Kalina

+7

@TheBeatlemaniac:在調用'lockCanvas()'之後在'Canvas'上繪圖時,你實際上正在繪製* next *幀,而*當前*幀正在顯示。 '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); 

你所得到的主緩衝區,您繪製成不會對每個持有人的鎖獲得不同的雙緩衝畫布。