2015-11-10 62 views
0

我無法找到如何在搜索時使用canvas.drawPicture()的可行示例。這個實現來自我對Android文檔的理解,儘管這裏的信息很少。如何正確使用canvas.drawPicture()Android

這是我目前的onDraw()實現:

protected void onDraw(Canvas canvas) { 
    Picture p = new Picture(); 
    Canvas pCanvas = p.beginRecording(200,200); 
    TextPaint tPaint = new TextPaint(); 
    pCanvas.drawText("Hello!",0,0,tPaint); 
    p.endRecording(); 

    //now draw the picture 
    canvas.drawPicture(p); 

} 

沒有顯示在屏幕上。

我明白這個例子很沒用。理想情況下,我將在後臺繪製圖片並將其傳遞給onDraw()方法,但這只是一個開始,看看我是否瞭解它的工作原理。

回答

2
  1. 屏幕上沒有顯示任何內容。爲什麼?

原因是你的ViewHardware accelerated。你需要有一個軟件畫布才能工作。你是怎樣做的?將以下代碼行添加到您的View的構造函數中。

setLayerType(LAYER_TYPE_SOFTWARE,null); 

現在,它會工作。同樣在你的drawText的座標是(0,0)。文字從基線繪製,屏幕從(0,0)開始。所以你可能想嘗試類似(0,50)的東西,或者在屏幕上渲染全文。

更多信息:
您可以通過兩種方法繪製圖片CanvasCanvas.drawPicture()Picture.draw()。需要注意的是,在這兩種情況下你都需要一個軟件畫布。如果您嘗試Picture.draw(canvas)並通過在硬件加速的畫布,你會得到以下異常:

java.lang.IllegalArgumentException: Picture playback is only supported on software canvas. 

但是,如果你犯了一個硬件加速畫布上Canvas.drawPicture(),沒有任何反應。圖片從未畫出。然而

API23消除了這個限制,並允許動用硬件加速畫布