Android dp px ppi pt等概念的理解

做Android开发过程中,总会用到px、dp、pt等概念,下面对它们代表的意义以及互相之间的关系做简单的介绍。

目录

1、px
2、ppi
3、pt
4、dp
5、Android获取屏幕状态信息

1、px 像素

就是一个颜色点,一个像素点,最小的单位。不同的颜色点组成一张图像,因此图像的基本单位是像素px。它是一个相对单位,在不同的密度单位下能变大变小。同样是1英寸的屏幕,密度越大,像素越多,则单个像素的物理尺寸越小。
像素数量px = 像素密度ppi x 屏幕尺寸in
所以在屏幕尺寸一定的情况下,密度越大,像素数量越多,显示效果就会越清晰。看下图:
在这里插入图片描述
像素px主要用来描述图像大小和显示器分辨率:
1) 相机所说的像素,其实就是最大像素的意思,像素是分辨率的单位,这个像素值仅仅是相机所支持的有效最大分辨率。
30万 640*480
50万 800×600
80万 1024×768 5” (3.5×5英寸)

2) 我们常说一张100kb大小的图片,指的是图片的体积。一张图像在存储时,会描述每个像素点的颜色信息、位置、数量,这些描述数据就是图片的体积,如果像素越多自然图像体积越大。

2、ppi 像素密度

指的是1英寸屏幕上显示的像素量,密度单位。决定图片的物理显示尺寸,只有涉及到显示才有意义。值越大,显示越细腻。
英寸是使用于联合王国(UK,即英国(英联邦)及其前殖民地的长度单位,一般为1英寸=2.54cm;
像素密度的直观衡量有三个关键指标:
1)每寸像素量:它指的是每平方英寸所含有的像素数量,单位为DPI;
2)像素面积:它指的是屏幕上每个像素占据的物理空间,单位为毫米;
3)像素尺寸:它指的是屏幕上每个像素的尺寸,单位为英寸。

计算公式: ppi=屏幕对角线上的像素量px/对角线长度inch = √(屏幕横向像素^2 + 屏幕纵向像素^2)/对角线长度。
在这里插入图片描述
在这里插入图片描述
比如 iphone6的ppi是多少?ppi=√(750px²+1334px²)/4.7in=326ppi。

其实我们日常所说的分辨率有两个概念。一个指显示器的分辨率,另一个是图像的分辨率:

1)显示器分辨率指显示器所能显示的像素多少。屏幕尺寸一定时,分辨率越大,像素密度越大,显示器可显示像素越多,画面就越精细。
2)图像分辨率则是单位英寸中所包含的像素点数,比如photoshop里新建画布时设置的图像分辨率是300ppi,其定义更趋近于分辨率本身的定义。

3、pt

这里只说iOS开发时使用的pt,pt是iOS系统的开发单位,而且是长度固定的,不随屏幕像素密度ppi变化而变化。
苹果公司规定:普屏时1px=1px,而普屏的ppi=163像素/英寸,那么pt=1/163英寸=0.16mm(固定值)。普屏1px=1px,高清屏1pt=2px。

用固定长度pt作为开发单位的好处是,这样可以保证同一张图片在不同设备上显示大小一样,因为pt值是固定的。高清屏上1pt等于更多的像素px,因为像素在高清屏上变小,所以pt还是固定的。

4、dp

dp是安卓的开发单位,也是一个固定长度的单位。
根据不同的屏幕分辨率,和px有不同的倍数关系。规定: 1dp等于屏幕像素密度为160ppi时1px的长度。
公式:1dp = (屏幕ppi/160)px。
在这里插入图片描述
现在我们知道,mdpi就是屏幕像素密度为160,那么就以它为标准吧,这些屏幕密度的比值是 ldpi : mdpi : hdpi : xhdpi : xxhdpi = 0.75 : 1 : 1.5 : 2 : 3。
安卓中清屏 1dp = 1px 高清屏 1dp = 1.5px 超清屏 1dp = 2px
一般做设计的时候以xhdpi为模板,xhdpi条件下 1dp = 2px,标注长度的时候,将长度像素除以2即为dp值,方便沟通。
在Android中像素密度可以通过下面的方式获取:

getResources().getDisplayMetrics().densityDpi

所以px与dp的转换方式如下:

public static float pxToDp(float px) {
	dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
	float densityDpi = dm.densityDpi;
	return px / (densityDpi / 160f);
}
 
public static int dpToPx(float dp) {
	dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
	float density = dm.density;
	return Math.round(dp * density);
}

5、Android获取屏幕状态信息

1)可以用过adb获取到屏幕的一些参数信息:
使用adb修改屏幕像素密度 (此命令针对全志开发板子)
adb shell am display-density 120
获取Android设备屏幕分辨率:
adb shell wm size
获取android设备屏幕密度:
adb shell wm density
修改屏幕像素密度
adb shell wm resize 1920*1080
adb shell wm size 540×960
重置屏幕尺寸大小
adb shell wm size reset
设置屏幕dpi (常用的dpi有160mdpi, 240hdpi, 320xhdpi, 480xxhdpi)
adb shell wm density 320
重置可用dpi如下命令
adb shell wm density reset

2)Android中通过方法获取屏幕信息的方法如下:

private String getScreenParams() {
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int heightPixels = dm.heightPixels;//高的像素
        int widthPixels = dm.widthPixels;//宽的像素
        int densityDpi = dm.densityDpi;//dpi
        float xdpi = dm.xdpi;//xdpi
        float ydpi = dm.ydpi;//ydpi
        float density = dm.density;//density=dpi/160,密度比
        float scaledDensity = dm.scaledDensity;//scaledDensity=dpi/160 字体缩放密度比
        float heightDP = heightPixels / density;//高度的dp
        float widthDP = widthPixels / density;//宽度的dp
        String str = "heightPixels: " + heightPixels + "px";
        str += "\nwidthPixels: " + widthPixels + "px";
        str += "\ndensityDpi: " + densityDpi + "dpi";
        str += "\nxdpi: " + xdpi + "dpi";
        str += "\nydpi: " + ydpi + "dpi";
        str += "\ndensity: " + density;
        str += "\nscaledDensity: " + scaledDensity;
        str += "\nheightDP: " + heightDP + "dp";
        str += "\nwidthDP: " + widthDP + "dp";

        return str;
    }
//打印信息
	heightPixels: 2235px
    widthPixels: 1080px
    densityDpi: 480dpi
    xdpi: 391.885dpi
    ydpi: 412.75dpi
    density: 3.0
    scaledDensity: 3.0
    heightDP: 745.0dp
    widthDP: 360.0dp
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值