2010-10-28 114 views
1

我正在製作一個應用程序,需要能夠在最後一組之上繪製新圖形。從舊畫布繪製 - Android

這是我目前的onDraw()方法 -

protected void onDraw(Canvas canvas) { 

    canvas.drawColor(Color.WHITE); 

    if(points.size() > 0) { 
     //do some stuff here - this is all working ok 
     canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint); 
    } 
} 

基本上,我需要繪製新的圖形作爲最後之上的一層,所以我正在尋找的是攜帶方式最後一個畫布的圖像到當前。

我試圖找出自己使用canvas.setBitmap()方法,但它的行爲非常有趣。

任何幫助表示讚賞:)

PS,它在需要時,該類擴展SurfaceView並實現SurfaceHolder.Callback

編輯:這是我在的onDraw()方法都試過,但它只是強制關閉

if(bitmap != null) { 
     canvas.drawBitmap(bitmap, 0, 0, paint); 
     canvas.setBitmap(bitmap); 
    } 

回答

4

找到自己的答案:)

@Override 
protected void onDraw(Canvas c) { 

if(bitmap != null && canvas != null) { 
    canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint); 
    c.drawBitmap(bitmap, 0, 0, linePaint); 
} 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

bitmap = Bitmap.createBitmap(width, height, Config.RGB_565); 
canvas = new Canvas(bitmap); 
canvas.drawColor(Color.WHITE); 
} 

工程完全按照預期,它創建於舊帆布不斷

0

您將不得不將前一個圖像持久存儲到ArrayList中,並且在ondraw過程中,通過ArrayList循環來重繪所有項目。

是這樣的:

for (Graphic graphic : _graphics) { 
    bitmap = graphic.getBitmap(); 
    coords = graphic.getCoordinates(); 
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null); 
} 
+0

難道不是頂部繪製的效果有沒有什麼方法可以創建畫布的位圖圖像,然後在下次調用onDraw()時繪製該圖像?每一幀都會畫出很多線條,這種方式我認爲是非常酷的處理器 – 2010-10-28 09:55:30