Android 適配(drawable文件夾)圖片適配(二)


參考自(https://blog.csdn.net/myoungmeng/article/details/54090891)

 

Android資源文件存放:

           android的drawable文件一共可以有:

           drawable-ldpi(低密度)               drawable-mdpi(中等密度)              drawable-hdpi(高密度)         drawable-xhdpi(超高密度)    

           drawable-xxhdpi(超超高密度)     drawable-xxxhdpi(超超超高密度)     drawable-nohdpi(無縮放)     當然還加上默認的drawable

 

    ----------以下是重點理解內容,一定要看懂----------

 

比如在一個中等分辨率的手機上,Android就會選擇drawable-mdpi文件夾下的圖片,文件夾下有這張圖就會優先被使用,在這種情況下,圖片是不會被縮放的;

但是如果沒有在drawable-mdpi的文件夾下找到相應圖片的話,Android系統會首先從更高一級的drawable-hdpi文件夾中查找,如果找到圖片資源就進行縮放處理,顯示在屏幕上;

如果drawable-hdpi文件夾下也沒有的話,就依次往drawable-xhdpi文件夾、drawable-xxhdpi文件夾、drawable-xxxhdpi文件夾、drawable-nodpi;

如果更高密度的文件夾里都沒有找到,就往更低密度的文件夾里尋找,drawable-ldpi文件夾下查找;

如果都沒找到,最終會在默認的drawable文件夾中尋找,如果默認的drawable文件夾中也沒有那就會報錯啦。(前提是把一張圖片做成很多不同的分辨率放在各個對應密度的drawable文件夾下)

舉個例子,假如當前設備的dpi是320,系統會優先去drawable-xhdpi目錄查找,如果找不到,會依次查找xxhdpi → xxxhdpi → hdpi → mdpi → ldpi。對於不存在的drawable-[density]目錄直接跳過,中間任一目錄查找到資源,則停止本次查找。

 

如何知道自己設備的dpi:

float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;

 

知道設備的dpi后就知道設備首先會在哪個drawable文件夾下去尋找了:dpi范圍密度對應范圍

 

 設備密度 適配資源文件密度
0dpi ~ 120dpi ldpi
120dpi ~ 160dpi mdpi
160dpi ~ 240dpi hdpi
240dpi ~ 320dpi xhdpi
320dpi ~ 480dpi xxhdpi
480dpi ~ 640dpi xxxhdpi

 

對於每種密度下的icon應該設計成什么尺寸其實Android也是給出了最佳建議,建議尺寸如下表所示:

資源文件密度  建議尺寸
mipmap-mdpi 48 * 48(博主實測圖標16就夠了)
mipmap-hdpi 72 * 72(博主實測圖標32就夠了)
mipmap-xhdpi 96 * 96(博主實測圖標48就夠了)
mipmap-xxhdpi 144 * 144(博主實測圖標64就夠了)
mipmap-xxxhdpi 192 * 192(博主實測圖標72就夠了)

 

總體匹配規則就是這樣:

如果圖片所在目錄dpi低於匹配目錄,那么該圖片被認為是為低密度設備需要的,現在要顯示在高密度設備上,圖片會被放大。

如果圖片所在目錄dpi高於匹配目錄,那么該圖片被認為是為高密度設備需要的,現在要顯示在低密度設備上,圖片會被縮小。

如果圖片所在目錄為drawable-nodpi,則無論設備dpi為多少,保留原圖片大小,不進行縮放。

 

六種通用密度

 

Android系統為了簡化開發者為多種屏幕設計用戶界面的方式,Android將實際屏幕尺寸和范圍作了通用規定,稱作“根據可用屏幕寬度管理屏幕尺寸的新技術”。六種通用密度為

密度 dpi范圍
ldpi(低) ~120dpi
mdpi(中) ~160dpi
hdpi(高) ~240dpi
xhdpi(超高) ~320dpi
xxhdpi(超超高) ~480dpi
xxxhdpi(超超超高) ~640dpi

通用密度是以mdpi(中)為基線配置的,此基線基於第一代Android設備(T-Mobile G1)的屏幕配置。

 

那么六種通用密度下的縮放倍數是多少呢?以mdpi為基線,各密度目錄下的放大倍數(即縮放因子density)如下

密度 放大倍數
ldpi 0.75
mdpi 1.0
hdpi 1.5
xhdpi 2.0
xxhdpi 3.0
xxxhdpi 4.0

例如,當前設備的dpi是480(即xxhdpi),那么對於存放於mdpi目錄中的圖片會被放大三倍。對於很多設備,其dpi並不剛好是六種通用密度最大dpi,這種情況下,圖片的縮放倍數如何計算呢?

稍微思考一下,我們就可以得到通用的縮放倍數(縮放因子)計算方法:對於任意設備,各drawable-[density]目錄下的圖片放大倍數的計算公式

縮放因子計算公式

那么,圖片的實現顯示尺寸通過圖片尺寸乘以縮放倍數就可以得到了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM