2013-03-11 40 views
2

很多博客和最佳實踐,爲Android開發的說允許在各種密度的Android Drawable中自動縮放?

你並不需要爲每一個可能的密度:位圖,Android將擴展您的位圖(它們被加載時,通常)來匹配電流密度 「。

參考鏈接:https://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8

我試了一下效果很好。 但我無法理解一件事。

例如,我創建了一個示例應用程序,其中5個全屏圖像在查看傳呼機中各有大約1.5 MB。

我爲Galaxy Tab 2等7英寸MDPI設備創建了大量圖像,並將它們放在「drawable-large-mdpi」文件夾中。它有點生澀,但沒有崩潰,讓我滾動瀏覽所有圖像。

現在我試圖在我的Nexus 7上使用這個幾乎是大型HDPI設備的應用程序。該應用在解碼位圖時與「OOM錯誤」崩潰。

* 如果我將圖像從較大的MDPI移動到較大的HDPI,它在兩個設備上運行良好,無任何崩潰。 *

所以我有兩個問題。

  1. 是否朝着這個結果傾斜,我們只能把圖形資產密度最高可繪製文件夾,並讓它在其範圍內自動縮小?
  2. 內部發生了什麼第一次墜毀?

回答

0
  1. 不,您可以將圖形資源放入任何可繪製的文件夾中。如果您只將資源置於一個密度文件夾中,則系統將上下擴展至目標設備密度。
  2. 您想在使用這些大圖像的同時使用大量內存。即使使用壓縮圖像格式,當系統在屏幕上繪製它時,它也會作爲位圖存儲在內存中。因此,如果您同時將4-5 1200x800像素的圖像保存在內存中,則會在位圖中佔用該內存量。這使你的應用程序崩潰,因爲它已經超出了授予的內存(默認情況下,android非常低,只能保證16 MB,而這通常由製造商擴大)。

當你把圖像的華電國際,系統縮小圖像,這就是爲什麼有可能被(不保證)足夠的內存對於較小的圖像。

解決方案:不要將那些大圖像用作背景。嘗試擴展性很好的圖像,並檢查了9補丁格式:link

+0

我知道9補丁是一個很好的概念。但有時我們無法提供幫助,因爲您知道客戶要求不會改變。而且我不會推薦使用Deev也提到的任何文件夾......因爲結果非常清晰。 – Nova 2013-03-12 06:02:49

3
  1. 這將是做到這一點,只要可繪製在縮放時看起來很好的一種方式。縮小尺寸通常是比放大更好。這就是說,有這樣一行:

    即使如此,當位圖縮放到的密度沒有一個設計 的,你可能會得到工件,如邊緣軟化。

    HDPITVDPI縮放的原因很好,因爲兩個密度非常接近。一些圖像的問題將在主要密度之間出現。例如,從HDPI跳到LDPI將肯定導致許多文物的圖像根本就不是專爲低的決議。

  2. 它很可能與Nexus 7中的OOM崩潰,因爲它會將設備認爲是MDPI圖像並將它們擴展爲TVDPI設置的大圖像。這將導致更大的圖像。

    當你把他們在華電國際的文件夾,你告訴它按比例縮小到TVDPI因此產生的圖像是更少的內存佔用。

    還有在實際縮放中發揮的開銷。當你放大到一個XHDPI設備

    同樣的事情也會發生可能。