Android 理解像素密度与像素的关系

2017-08-16  本文已影响0人  xinwa

Android的手机多种多样,不同手机的屏幕密度也不同,故在相同物理尺寸下的所包含的像素点是不同的。

开发使用

在日常开发中,界面的xml文件中我们使用的是 dp 的单位,但是开发中使用的Android 的 API 则是 px。对于xml文件,系统在进行界面绘制时,会根据手机屏幕密度计算出对应的像素尺寸,所以我们在编写代码需要进行适配,根据不同手机屏幕的密度设置像素尺寸。

密度是单位体积的质量,所以相同物理尺寸下的屏幕区域中,密度越大,那么这块区域内的像素点也就越多。如果在代码中添了设计给的像素尺寸,那么在密度大的手机上,实际的显示效果就会比设计图上的小了。

dp与px转换公式

px = dp * (dpi / 160)
dp = px / (dpi / 160)

这个公式的由来是因为,android官方规定,在dpi为160的设备下,1dp = 1px,其中 dpi / 160 也称之为密度。那么在320dpi设置下,1dp = 2px。

Google的官方文档给出过解释,因为第一款 Android 设备( HTC 的T-Mobile G1)是属于(注意,是属于,不是等于)160dpi的,

dp 与 px 转换代码

public static int dipToPx(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public static int pxToDip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

在代码中转换时最后加上了0.5f,Android官方文档给的解释是为了向上取整,这样转换也就更精确

相关概念

DPI

DPI 全称为 Dots Per Inch. (Inch的含义是英寸),意思也就是『一英寸内点的个数』。Android 设备采用 DPI 来表示屏幕的『密度』。DPI 原本是印刷行业的概念,意思是一英寸内有多少个墨点。

PPI

PPI(Pixels Per Inch) 意思是『每英寸内的像素数』,这是通用的概念

屏幕尺寸

手机所说的5.0寸指的是屏幕对角线的长度为5.0英寸。1英寸 = 2.54cm

分辨率

指的是屏幕的像素总数,1920 X 1080 的分辨率指的屏幕是由长为1920个像素点,宽为1080个像素点所组成的长方形区域。

屏幕密度

可以通过屏幕的长宽算出对角线的长度除以对角线的长度,就可以算出每英寸的屏幕密度

px

px 就是像素 pixel 的缩写。1px 代表一个显示设备中的一个像素点。

dp

DP 或者 DIP 叫做(Density-Independent pixel),Android 中的特有单位,它的大小是由操作系统根据手机屏幕密度动态渲染出来的,1dp 对应多少 px 在不同的设备上,可能是不一致的。

上一篇下一篇

猜你喜欢

热点阅读