2012-07-06 168 views
3

如果您始終必須繪製相同的矩形,則使用靜態位圖或使用canvas.drawRect()會更快嗎?Android畫布 - 繪製矩形或矩形的圖片

對於這個例子,這是四個分層矩形。所以一個填充顏色的寄宿生,然後是中間色和填充色之間的邊界。

因此四個paint.setColor()命令和四個canvas.drawRect命令或一個canvas.drawBitmap()。

+2

你爲什麼不來點時間呢? – Cheesebaron 2012-07-06 15:32:35

+0

如果你這樣做,沒有paint.setColor();你不應該在抽牌程序中改變你的顏料,你應該有四種顏料。爲每個矩形使用每個矩形。或者如果您繪製相同的顏色,則重複使用它們。 – Tatarize 2015-09-19 11:24:48

回答

3

我強烈建議drawRect()

位圖佔用大量內存,並且如果使用不當,可能會導致異常(Out Of Memory)。

撰稿安卓

位圖佔用了大量的內存,特別是對於豐富相似圖片照片。例如,Galaxy Nexus上的相機拍攝高達2592x1936像素(500萬像素)的照片。如果使用的位圖配置是ARGB_8888(Android 2.3以後的默認設置),則將該圖像加載到內存中需要大約19MB內存(2592 * 1936 * 4字節),立即耗盡某些設備上的每個應用程序限制

爲了防止頭痛和意外的崩潰。使用drawRect();

如果您正在爲不同的對象定期進行這4次繪製,請考慮編寫一個方法,爲您完成所有4個操作。所以你不會引起大量的重複。

例如:

public void DrawMyRect(Canvas canvas, int x, int y) 
{ 
    canvas.drawRect(x, y ,x + 15, y + 40, paint); 
    // Draw its line etc etc.. 
} 

或者,如果你去繪製位圖,因爲它不具備的優勢:

See this epic Link by Android, on how to properly use Bitmaps

+0

這是怎麼回事:http://stackoverflow.com/questions/5643151/load-bitmap-or-draw-graphic-performance-question我收到混合的迴應。而且我的圖像足夠小,我不應該有內存錯誤。性能是我現在關心的。將會有六個32x32圖像。 – 2012-07-06 15:41:19

+0

添加到我的答案。如果你使用小圖片,應該不會有問題。性能也不會有明確的提高。我在這裏有一個應用程序,可以在不到一秒的時間內繪製數百行/形狀等。如果您使用少量形狀,我不會看到任何性能問題。如果您使用位圖,我建議您按照鏈接進行操作,以確保您能夠有效地執行此操作。 – Doomsknight 2012-07-06 15:47:28

+0

@NathanTornquist。更何況,一個位圖將是固定的大小,所以如果你調整它的大小,它可能會變得更糟糕。 DrawRect清晰,清脆,可以在不損失外觀的情況下輕鬆更改,以適應您的形狀/需求。 – Doomsknight 2012-07-06 15:52:16

0

的性能差異可能是微不足道的。位圖將使用更多的內存,畫布繪製調用將使用稍多的CPU。如果您想要在沒有位圖開銷的情況下減少呼叫,則可以使用ShapeDrawable