Android之drawable和mipmap目錄區別

lvxiangan發表於2018-11-30

在android studio中我們建立專案後,在資源res檔案中有drawable和mipmap兩種存放圖片的資料夾,在使用哪一個資料夾來存放圖片,一直都很有爭議:

android 在 API level 17 加入了 mipmap 技術,對 bitmap 圖片的渲染支援 mipmap 技術,來提高渲染的速度和質量。
mipmap 是一種很早就有的技術了(紋理對映技術),android 中的 mipmap 技術主要為了應對圖片大小縮放的處理,在android 中我們提供一個 bitmap 圖片,由於應用的需要(比如縮放動畫),可能對這個 bitmap 進行各種比例的縮小,為了提高縮小的速度和圖片的質量,android 通過 mipmap 技術提前對按縮小層級生成圖片預先儲存在記憶體中,這樣就提高了圖片渲染的速度和質量。在API中通過 Bitmap 的 public final void setHasMipMap (boolean hasMipMap) 方法可以讓系統渲染器嘗試開啟 Bitmap 的 mipmap 技術。但是這個方法只能建議系統開啟這個功能,至於是否正真開啟,還是由系統決定。

res 目錄下面 mipmap 和 drawable 的區別也就是上面這個設定是否開啟的區別。
mipmap 目錄下的圖片預設 setHasMipMap 為 true,drawable 預設 setHasMipMap 為 false。

google 建議大家只把 app 的啟動圖示放在 mipmap 目錄中,其他圖片資源仍然放在 drawable 下面。

 

 

由於執行 Android 的裝置具有多種螢幕密度,您應始終提供能夠根據各種通用密度級別(低密度、中密度、高密度和超高密度)進行定製的點陣圖資源。這有助於您在所有螢幕密度上獲得良好的圖形質量和效能。如需生成這些影像,您應以向量格式的原始資源為基礎,按以下尺寸縮放比例生成每種螢幕密度對應的影像:

  • xhdpi:2.0
  • hdpi:1.5
  • mdpi:1.0(基準)
  • ldpi:0.75

這意味著,如果您為 xhdpi 裝置生成了一幅 200x200 的影像,則應分別按 150x150、100x100 和 75x75 影像密度為 hdpi 裝置、mdpi 裝置和 ldpi 裝置生成同一資源。然後,將生成的圖片檔案置於 res/ 下的相應子目錄中,系統將自動根據執行您的應用的裝置的螢幕密度選取正確的檔案:

MyProject/
  res/
    drawable-xhdpi/
        awesomeimage.png
    drawable-hdpi/
        awesomeimage.png
    drawable-mdpi/
        awesomeimage.png
    drawable-ldpi/
        awesomeimage.png

之後,每當您引用 @drawable/awesomeimage 時,系統便會根據螢幕 dpi 選擇相應的點陣圖。將您的啟動器圖示置於 mipmap/ 資料夾中。

res/...
    mipmap-ldpi/...
        finished_launcher_asset.png
    mipmap-mdpi/...
        finished_launcher_asset.png
    mipmap-hdpi/...
        finished_launcher_asset.png
    mipmap-xhdpi/...
        finished_launcher_asset.png
    mipmap-xxhdpi/...
        finished_launcher_asset.png
    mipmap-xxxhdpi/...
        finished_launcher_asset.png

注:您應該將所有啟動器圖示都置於 res/mipmap-[density]/ 資料夾而非 drawable/ 資料夾內,以確保啟動器應用使用最佳解析度圖示。 如需瞭解有關使用 mipmap 資料夾的詳細資訊,請參閱管理專案概覽。

 

相關文章