Android之drawable和mipmap目錄區別
在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 資料夾的詳細資訊,請參閱管理專案概覽。
相關文章
- Android中drawable和mipmap到底有什麼區別Android
- Android之工程目錄lib和libs區別Android
- Android Handler機制之總目錄Android
- Android之android:theme設定在Application 和 Activity的區別AndroidAPP
- Android: Bitmap/Canvas/DrawableAndroidCanvas
- Android之Intent的setClass和setClassName的區別AndroidIntent
- Linux系統中bin和sbin目錄的主要區別!Linux
- Android Studio之Gradle和Gradle外掛的區別AndroidGradle
- Linux中檔案與目錄的區別Linux
- Android之getApplication()、getApplicationContext的區別AndroidAPPContext
- Android技能樹 — Drawable小結Android
- Python之“==”和“is”區別Python
- Android 的各種 Drawable 詳解Android
- Android-Drawable setColorFilter方法踩坑AndroidFilter
- Android 目錄結構分析Android
- mipmap 二
- Android核心和Linux核心的區別AndroidLinux
- c++ 和 c 三目運算子區別C++
- [Android] Folivora,在layout中直接建立drawableAndroid
- React Native 修改Android工程目錄React NativeAndroid
- CSS系列之目錄CSS
- Android Studio 配置目錄的建立和一些基本配置Android
- JavaScript之childNodes 和 children 區別JavaScript
- Vue2 dist 目錄下各個檔案的區別Vue
- Android系統原始碼目錄解析Android原始碼
- Android 開發知識集合目錄Android
- 關於檔案系統在建立目錄檔案和普通檔案時的區別
- Android程式(Processes)和任務(tasks)的區別Android
- Java開發和Android開發的區別JavaAndroid
- Android 開發中 getContext 和 getActivity的區別AndroidContext
- Java之InetSocketAddress和SocketAddress的區別Java
- Java之.class和.getClass()的區別Java
- @Bean和@Component之間的區別?Bean
- Java之for(;;)和while(true)的區別JavaWhile
- querySelector和getElementById之間的區別
- MySQL之Where和Having的區別MySql
- 敏捷和 Scrum 之間的區別敏捷Scrum
- 面試之 get 和 post 區別面試