1. 程式人生 > >drawable與mipmap的區別(android資原始檔放置位置)

drawable與mipmap的區別(android資原始檔放置位置)

今天在網上瀏覽部落格,看到這一個問題,我們的圖片資源到底放在drawable還是mipmap目錄中,網上的爭議很大, 今天打算就我的觀點說一下這個問題,如果我的回答讓大神們有所質疑,希望多多提點。 首先我們應該知道他們的意義:
1.Drawable Android 把可繪製的物件抽象為Drawable,不同的圖形影象代表著不同的darwable型別, 通常我們在程式碼中不會直接接觸drawable實現類的,是由android FrameWork提供了一些 具體的drawable的實現。 我們在實際開發中,會把drawable的資源放在res/drawable目錄上,當需要使用圖片資源時 可以通過@drawable或者id引入這些drawable資源 drawable是預設共享的,不同的地方使用了相同資源drawable,他們會指向相同的資源,相同 的狀態,如果drawable被修改了,其他都被修改了, 2.mipmap 在使用android Studio 建立專案的時候,常常會看到系統吧ic_launcher.png圖片放在mipmap-xxhdpi 目錄下,mip來源於拉丁文中的mulium in parvo 意為在一個小空間的多數,MIP map是一種電腦圖形影象技術,用於在三維影象的二維代替物中達到立體感效果 mipmap目錄的圖示會忽略螢幕密度,回去匹配大一點的,然後系統自動對圖片進行縮放,從而優化顯示和節省資源。官方建議如下型別的圖片資源放在mipmap目錄: launcher icons action bar and tab icons Notification icons 3.針對於drawable 與 mipmap都有了一定的認識,那麼我們在實際開發中,到底把圖片資源放在drawable下還是mipmap下? 答案:mipmap資料夾方應用圖示,其實需要使用drawable資源像之前一樣對應的放到drawable資料夾, 根據這篇google的博文:  It’s best practice to place your app icons in mipmap- folders (not the drawable- folders) because they are used at resolutions different from the device’s current density.  應用的啟動圖示最好放到mipmap資料夾(不是drawable資料夾),因為它們用在不同解析度的裝置上。  When referencing the mipmap- folders ensure you are using the following reference:  當引用mipmap資料夾的資源時,需要使用下面的方式: android:icon="@mipmap/ic_launcher" 結論:  mipmap僅僅用於應用啟動圖示,可以根據不同解析度進行優化。其他的圖示資源,還是要放到drawable資料夾中。 Android 官方解釋[3]: Note: You should place all launcher icons in the res/mipmap-[density]/ folders, rather than drawable/ folders to ensure launcher apps use the best resolution icon.  注意:你應當將雖有啟動圖示放到res/mipmap-[density]/資料夾中,而不是drawable/資料夾,來確保啟動圖片使用最好的解析度圖示。 在網上查閱兩道面試題,希望能加深一下大家的印象: Android資源目錄的讀取順序? Android資原始檔可以定義在不同解析度、螢幕方向、語言等(甚至還有夜間模式),當我們的應用需要使用一個資源,這個資源(圖片、Layout或者別的)可能在很多res下的子目錄中都存在,那麼Android系統是如何確認使用哪一個資源呢? 這就是一個Android應用的資源查詢的順序問題,其實簡單說,在查詢時會先去掉有衝突的資源目錄(上圖第1步),然後再按MCC、MNC、語言等指定的優先順序進行查詢,直到確認一個匹配資源。根據螢幕尺寸限定符選擇資源時,如果沒有更好的匹配資源,則系統將使用專為小於當前螢幕的螢幕而設計的資源。 圖片放錯目錄會產生的問題嗎? 這一點可能很多人都不會注意,覺得只要往一個drawable目錄中放了需要的資源就好了。而我們可以自己做一個簡單的測試,把同一個圖片資源放在不同的dpi目錄,會發現它們使用的記憶體是不一樣的。簡單說就是高密度(density)的系統去使用低密度目錄下的圖片資源時,會將圖片長寬自動放大以去適應高密度的精度,當然圖片佔用的記憶體會更大。 所以如果能提各種dpi的對應資源那是最好,可以達到較好記憶體使用效果。如果提供的圖片資源有限,那麼圖片資源應該儘量放在高密度資料夾下,這樣可以節省圖片的記憶體開支。