2012-04-04 38 views
2

我有需要縮放到屏幕大小的圖像。圖像中也會有文字,需要翻譯成第二種語言。因此,每個圖像都會有兩個版本開始,每種語言都有一個版本。減少Android可選擇的可繪製資源

Google建議每個密度都有一個圖像資源。所以我會把我的兩個圖像乘以4:xhdpi,hdpi,mdpi和ldpi。但隨後谷歌說不同的屏幕尺寸有不同的圖像資源。這使我的圖像再乘以4:xlarge,large,normal和small。我不想創建每個圖像的32份副本!

我想知道是否有任何錯誤,使xlarge屏幕和xhdpi密度的圖像只。 IE - 最好的質量。讓Android按照dp單位的標準縮小圖像的密度以降低密度。當我在較小的屏幕上畫畫時,我可以使用Canvas類進一步縮小比例。每次需要重繪位圖時,我都可以緩存生成的縮放比特圖對象,以避免昂貴的縮放計算一遍又一遍地運行。

這樣做有什麼缺點嗎?還是有更好的方法來避免製作同樣圖像的這麼多副本?

回答

0

在小型(低端)設備上縮放大型圖像時會出現性能損失。這是否顯而易見取決於您需要顯示的圖像數量。
對於記憶也是同樣的,必要的變通。

+0

謝謝,很好的反饋。澄清一點:我希望通過緩存縮小的位圖,然後它應該垃圾收集原始較大的圖像。我不認爲這個一次性GC事件會影響到這個特定應用程序的差異。但是,你知道縮減後的緩存位圖實例是否會具有相同的內存佔用量,還是會比使用Google的備用資源方法實例化時大? (假設兩種方法都會產生相同物理尺寸的位圖。)如果尺寸較大,那麼對我來說這可能是個問題。謝謝! – 2012-04-04 14:47:21

+0

好問題。我不確定你打算如何縮減比例,所以很難給出最終答案(只要我知道:-))。你可以做以下(間接)測試:從資源加載一個位圖後,我假設isMutable()將返回false。我想在縮放之後,得到的位圖將具有isMutable()= true,間接表明它是一個副本,因此可能擁有自己的內存。 – 2012-04-04 14:56:21

0

我只爲最高的xhdpi像素密度創建位圖,然後在其他屏幕類型上進行測試。

如果位圖在某些密度較低的屏幕上看起來不好,我會重新制作該密度。而這種情況很少發生......

此外,不需要爲不同的屏幕尺寸(small/xlarge)製作特殊的位圖 - 只需讓ImageView-s變小/變大 - 圖像縮放不是一個緩慢的操作,所以在大多數情況下你不需要擔心它(除非你的位圖覆蓋整個屏幕)。