❶ android中dp和px之間如何進行轉換
在Android開發中常用到px,in,mm,pt,dp,dip,sp這幾個單位px :是屏幕的像素點in :英寸mm :毫米pt :磅,1/72 英寸dp :一個基於density的抽象單位,如果一個160dpi的屏幕,1dp=1pxdip :等同於dpsp :同dp相似,但還會根據用戶的字體大小偏好來縮放。
❷ px、dp、sp、dpi之間的區別和轉換
px、dp、sp、dpi之間的區別和轉換
區別:
px (pixels)像素 -- 是像素,就是屏幕上實際的像素點單位。(一般UI人員在ps中經常使用)
dp/dip 設備獨立像素,android layout經常使用的尺寸單位,與設備屏幕有關,dp是虛擬像素,在不同的像素密度的設備上會自動適配。即與像素密度無關。
sp 放大像素,主要是處理字體的大小
dpi:Android支持四種不同的dpi模式:ldpi mdpi hdpi xhdpi
hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
ldpi裡面存放低解析度的圖片,如QVGA (240x320)
轉換:
a.首先了解常見的解析度Resolution:
解析度:指手機屏幕垂直和水平方向上的像素個數。比如解析度是480*320,則指設備垂直方向有480個像素點,水平方向有320個像素點。
VGA 顯示繪圖矩陣 640×480
HVGA half 480×320
QVGA quarter 320x240
b.dpi像素密度,指每英寸中的像素數,該值對應於DisplayMetrics類中屬性densityDpi的值
(例子:設備解析度為320*240,屏幕長2英寸寬1.5英寸 dpi=320/2=240/1.5=160)
c.density屏幕密度,指每平方英寸中的像素數,在DisplayMetrics類中屬性density的值為dpi/160(用這個進行dp sp之間的轉化)
如圖:
d.px 和 dp 互轉換
計算公式:實際像素數px=1dp*像素密度(dpi)/160 =dp*density
在320x480解析度,像素密度dpi為160,1dp=1px
在480x800解析度,像素密度dpi為240,1dp=1.5px
/**
* 根據手機的解析度從 dp 的單位 轉成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據手機的解析度從 px(像素) 的單位 轉成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}