px:像素单位,如手机分辨率320px *480px,1px
代表屏幕上的一个物理的像素点。
像素即px,是画面中最小的点(单位色块)。像素的大小是没有固定长度值的,不同设备上1个单位像素色块的大小是不一样的。
像素组成的图像叫位图。
分辨率=画面水平方向的像素值 * 画面垂直方向的像素值。分辨率可以分为两方面:屏幕分辨率和图像分辨率。
sp:字体大小,会根据用户的字体大小偏好来缩放
dp=dip:device independent pixels 虚拟像素,在不同的像素密度的设备上会自动适配
像素密度:每英寸像素(英语:Pixels Per Inch,缩写:PPI),ppi有时缩写为DPI(dots per inch,每英寸点数)。通常DPI这个单位用于印刷领域,而PPI用于计算机领域。
在320x480分辨率,像素密度为160,1dp=1px
在480x800分辨率,像素密度为240,1dp=1.5px
1、1.5这些是density,density
表示对应的dp到px的系数,这个系数乘以dp长度就是像素数。
float scale = getContext().getResources().getDisplayMetrics().density;
计算公式:px = dp * (dpi/160)
使用px作为单位的,在不同的设备中会显示不同的效果。使用dp作为单位的,会根据不同的设备进行转化,适配不同机型。所以建议在长度宽度的数值使用dp作为单位。
使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位。
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dp2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
+0.5是为了四舍五入转换成int类型