2015-10-27 62 views
1

我有一個相同的自定義視圖類的三個全屏幕的子視圖相對佈局。我想知道我是否應該擔心記憶。通過這個回答來判斷: Understanding Canvas and Surface concepts每個視圖都有自己的畫布/位圖來繪製嗎?

所有的視圖都通過與基礎位圖相同的畫布進行繪製以便內存不會變成三倍。有人可以確認嗎? 這是有道理的,否則全屏文本視圖將是非常低效的。

獎勵:畫布的目的是定義位圖的可繪製區域並將視圖座標轉換爲位圖座標?

回答

1

按照文檔http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas

當你寫的,你想進行專業的作圖和/或控制圖形的動畫的應用程序,你應該通過畫布繪製這樣做。一個Canvas可以作爲你的圖形繪製的實際表面的假裝或接口 - 它可以保存你所有的「draw」調用。通過畫布,您的繪圖實際上是在底層位圖上執行的,該位圖放置在窗口中。

onDraw(Canvas canvas)中,給出了一個canvas對象。這canvas有一個基礎bitmap。所有視圖都沒有被賦予相同的畫布。畫布只是普通bitmap(它是屏幕上的像素)上方的一層。 canvas爲您提供儘可能多的操作bitmap。所以每個視圖都有一個畫布,但不是它自己的位圖。

所以不,就內存而言,三個視圖並不意味着內存是三倍,因爲只有one位圖。但是,如果你這樣做,你可以創建自己的bitmap,那麼你會慢慢地記憶。如果您創建3個大小與屏幕相同的位圖,則內存將會增加三倍。

+0

謝謝。公認。 –