2017-02-09 104 views
1

我設法擴展位圖。在畫布中心在公共無效onDraw(畫布畫布)的縮放位圖

Rect src = new Rect(0, 0, icon.getWidth() - 1, icon.getHeight() - 1); 
Rect dest = new Rect(0,0,Math.round(newWidth), Math.round(newHeight)); 
canvas.drawBitmap(icon, src, dest, null); 

問題是圖像出現在畫布的左側。 我希望它在畫布中間。 一個很大的問題是我很擔心內存管理。所以我不想預先創建縮放位圖,我寧願使用創建並繪製縮放位圖的方法:

canvas.drawBitmap(icon, src, dest, null); 

我該怎麼做?

回答

0

如果你想讓圖像以Canvas爲中心,只需計算中心座標並將其應用於dest即可。

int cx = (getWidth() - newWidth)/2; 
int cy = (getHeight() - newHeight)/2; 

Rect src = new Rect(0, 0, myBitmap.getWidth() - 1, myBitmap.getHeight() - 1); 
Rect dest = new Rect(cx, cy, cx+Math.round(newWidth), cy+Math.round(newHeight)); 
canvas.drawBitmap(myBitmap, src, dest, null); 

然而,這是不是這樣做,因爲你創建的每onDraw(Canvas)被稱爲時間2 Rect的正確途徑。只要gc垃圾收集它,它就停留在內存中。

爲避免這種情況,您可以預先計算Rect並將它們存儲,因爲它們不像內存中的位圖那麼大。

+0

好吧,我會試試 – Badulake

+0

你真棒 – Badulake

+0

謝謝你的讚美。 –