px、dp哟楷、sp瘤载、dpi之間的區(qū)別和轉(zhuǎn)換
區(qū)別:
px (pixels)像素 -- 是像素,就是屏幕上實際的像素點單位卖擅。(一般UI人員在ps中經(jīng)常使用)
dp/dip 設備獨立像素惕虑,android layout經(jīng)常使用的尺寸單位,與設備屏幕有關磨镶,dp是虛擬像素,在不同的像素密度的設備上會自動適配健提。即與像素密度無關琳猫。
sp 放大像素,主要是處理字體的大小
dpi:Android支持四種不同的dpi模式:ldpi mdpi hdpi xhdpi
hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
mdpi里面存放中等分辨率的圖片,如HVGA (320x480)
ldpi里面存放低分辨率的圖片,如QVGA (240x320)
轉(zhuǎn)換:
a.首先了解常見的分辨率Resolution:
分辨率:指手機屏幕垂直和水平方向上的像素個數(shù)私痹。比如分辨率是480*320脐嫂,則指設備垂直方向有480個像素點统刮,水平方向有320個像素點。
VGA 顯示繪圖矩陣 640×480
HVGA half 480×320
QVGA quarter 320x240
b.dpi像素密度账千,指每英寸中的像素數(shù)侥蒙,該值對應于DisplayMetrics類中屬性densityDpi的值
(例子:設備分辨率為320*240,屏幕長2英寸寬1.5英寸 dpi=320/2=240/1.5=160)
c.density屏幕密度匀奏,指每平方英寸中的像素數(shù)鞭衩,在DisplayMetrics類中屬性density的值為dpi/160(用這個進行dp sp之間的轉(zhuǎn)化)
如圖:
d.px 和 dp 互轉(zhuǎn)換
計算公式:實際像素數(shù)px=1dp*像素密度(dpi)/160 =dp*density
在320x480分辨率,像素密度dpi為160,1dp=1px
在480x800分辨率娃善,像素密度dpi為240,1dp=1.5px
/**
* 根據(jù)手機的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據(jù)手機的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}