如何计算与设备无关的像素单元?

How to compute device independent pixel units?

我假设术语密度无关像素设备无关像素具有相同的含义。

密度无关像素(dip)是一种虚拟像素单元,相当于160dpi(MDPI)屏幕上的一个物理像素。

4dip 等同于 320dpi (XHDPI) 屏幕,因为在 320dpi 屏幕上用于渲染相同数据的像素数是 4(横向 2 个像素,向下 2 个像素).

如何计算 240dpi (HDPI) 屏幕的像素单位?

您可以使用这样的 DPI 计算器 one.You can check http://petrnohejl.github.io/Android-Cheatsheet-For-Graphic-Designers/#screen-densities-and-icon-dimensions 计算 DPI 比例。使用这个,HDPI = MDPI x 1.5 所以在你的情况下,该值将是 240

MDPI 的 HDPI 是 x1.5。

也就是160x1.5 = 240.

在 dip 单位标准的 MDPI 设备上,1dip 为 1px。 在 HDPI 设备上,物理上相同大小的 1dip 是 1.5px。

当你最初知道一些px值时,你可以通过除以它的scale将它转换成dip,例如HDPI的scale是1.5,你可以除px值1.5.

对于相同的 2dip,HDPI 上下各有 3px,而 MDPI 上下各有 2px。

2dip => 2px on MDPI
2dip => 2 x 1.5 = 3px on HDPI

dip的概念是,1 dip 表示物理尺寸大约为 1/160 英寸,这是所有具有不同像素密度的设备的通用物理尺寸。

考虑到当前设备指标,您可以使用此函数从 dp 获取像素值。

public int dpToPx(int dp){
    return Math.round(dp*(getResources().getDisplayMetrics().xdpi/ DisplayMetrics.DENSITY_DEFAULT));
}