1. 程式人生 > >徹底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi,圖片到底放在哪個目錄

徹底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi,圖片到底放在哪個目錄

Levin:任何美工做圖,他/她都會以特定的解析度的屏為基礎來做的,比如1920*1080、iphone5的解析度1136*640。安卓的圖按照最大的解析度1080*1920出圖,然後放到xxhdpi下,還是很好用的,絕大部分螢幕都會縮小圖片來適配,不會出現圖片拉伸變模糊的情況。

一句話總結:安卓系統在哪個目錄下找到圖,就以這個目錄對應解析度為基礎,按照一定的比例,來縮小或者放大圖片來適配當前螢幕的解析度。

這個問題我相信困惑了好多人包括很多老鳥,而且有的人以為自己理解其實是錯誤的,包括之前的我在內,一般讓美工做720*1280的切圖,就直接放到xhdpi下,如果是做了1080*1920,就直接放到xxhdpi下。其實這四個資料夾和具體的螢幕解析度是沒直接關係的,上面說的做法也有一定道理,因為大部分的720*1280的手機都是高密度手機,1080*1920都是超高密度手機,但是這四個資料夾之和螢幕密度有關,和具體解析度無關。
 
下面給出一個最最關鍵的等式:
  low:medium:high:extra-high:extra-extra-high=3:4:6:8:12 也就是 ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12
 
OK,就是說五個資料夾的比例為3:4:6:8:12。具體是怎麼回事呢?下面分析一下:
 比如我用一個480*800的4寸手機,這個手機的螢幕密度按照Google的說法,就屬於密度為high level的水平(通過解析度和螢幕尺寸計算密度,然後google自己有一套標準說你位於哪個範圍屬於哪個level的密度水平),然後這個手機的應用在用圖片的時候,就會去hdpi下去找,並且以這個資料夾的圖片為標準,也就是說比如我的應用去取一張aa.png的圖片,這個圖片的原圖尺寸為30*30,恰好hdpi下有一張,那這張圖片顯示到螢幕上以後,它的顯示尺寸長寬都為30px。那問題來了,但如果我的hdpi下沒有這張圖片,而只在xhdpi下有這張圖片,圖片的原圖尺寸是30*30,那請問顯示到螢幕上的圖片的尺寸會是多大呢,還是長寬都為30px嗎?
 

答案是否定的,而且現在就用到了上面那個比例,high:extra-high=6:8。先明確這樣一個問題,如果我的螢幕是hdpi的,結果我的圖片是放到了xhdpi下,那系統會把這張圖片進行縮小顯示,也就是說我的xhdpi下放了一張30*30的圖片,那顯示當hdpi螢幕上肯定要比30*30小,這樣才能保證說大小螢幕介面顯示效果是一致的,因為密度小的手機顯示一張圖片要比密度大的手機顯示同一張圖片的面積要大,要想顯示面積一樣就必須要把圖片搞小點。接上面的問題,假設顯示在我的hdpi螢幕上的圖片的寬度為x,那滿足以下等式:
 6:8=x:30 。 
 可得到x=22.3,向後取整數得23 。
 
有興趣的朋友可以驗證一下~~(PS:我已經驗證過了才敢在這吹。哈哈~)
 
OK,這就是對這五個資料夾的徹底理解~  謝謝~