手機(jī)的尺寸: 屏幕對角線的長度,單位為英寸(2.54cm)
手機(jī)的分辨率: 屏幕能顯示的像素的數(shù)量, 一般用在長方向上數(shù)量*寬方向上數(shù)量來表達(dá)
手機(jī)的像素密度: pixels per inch雳窟,也稱PPi,即每英寸屏幕能顯示的像素?cái)?shù)匣屡,像素密度越大封救,顯示畫面細(xì)節(jié)就越豐富。?計(jì)算:像素密度={1+√[(長度像素?cái)?shù)-1)2+(寬度像素?cái)?shù)-1)2]}/屏幕尺寸
DPI: Dots Per Inch(每英寸所打印的點(diǎn)數(shù)或線數(shù))的縮寫捣作,用來表示打印機(jī)打印分辨率, 但有時(shí)也會(huì)用dpi來代指ppi
手機(jī)的密度: Density, 以160dpi為基準(zhǔn),手機(jī)的像素密度與基準(zhǔn)的比值誉结。 即像素密度為160時(shí)Density為1
常用dpi標(biāo)識(shí)(字母) | 常用dpi標(biāo)識(shí)(數(shù)字) | 手機(jī)密度(density) |
---|---|---|
ldpi | 120dpi | 0.75 |
mdpi | 160dpi | 1.0 |
hdpi | 240dpi | 1.5 |
xhdpi | 320dpi | 2.0 |
px: pixels(像素) ,1px就是屏幕上一個(gè)物理像素點(diǎn)的大邢河睢(長度)搓彻。
dp/dip: device-independent pixels(設(shè)備無關(guān)像素),一個(gè)基于density的抽象單位,如果一個(gè)160dpi的屏幕(手機(jī)密度為1的話)嘱朽,1dp=1px
定義:1dp = (dpi / 160) px
也就是1px = 1/density dp
即:1dp = density px
- 160dpi:1dp = 1px
- 120dpi:1dp = 0.75px
- 320dpi:1dp = 2px
dp值轉(zhuǎn)換為px值得方法為:
假設(shè)手機(jī)密度 :density = x旭贬,dp的值為y
由1dp = density px
可知ydp = yx px
所以結(jié)果為yx
px值轉(zhuǎn)換為dp值得方法為:
假設(shè)手機(jī)密度 :density = x,px的值為y
由1px = 1/density dp
可知 ypx = y/x dp
所以結(jié)果為y/x
因此有了如下方法:
public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale + 0.5f); } public static int px2dip(Context context, float pxValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(pxValue / scale + 0.5f); }
至于為什么要加0.5f搪泳?
因?yàn)樵趈ava中稀轨,強(qiáng)制轉(zhuǎn)換符把float轉(zhuǎn)換為int時(shí),是直接丟掉小數(shù)部分的岸军,加0.5f起到了四舍五入的作用奋刽,可以減小誤差瓦侮。