px、dp、sp、dpi之间的区别和转换

作者: 芒果味的你呀 | 来源:发表于2017-08-07 21:17 被阅读207次

    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);

    }

    相关文章

      网友评论

        本文标题:px、dp、sp、dpi之间的区别和转换

        本文链接:https://www.haomeiwen.com/subject/wzxzlxtx.html