Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将像素转换为dp?_Java_Android_Pixels_Density Independent Pixel - Fatal编程技术网

Java 如何将像素转换为dp?

Java 如何将像素转换为dp?,java,android,pixels,density-independent-pixel,Java,Android,Pixels,Density Independent Pixel,我正试图用Java创建一个简单的android应用程序,但我遇到了一个困难 我有一个数组列表,其中包含许多位图,我正在将它们绘制到画布上,但我使用的是像素的度量,这在大多数设备上都不正确 那么,有没有办法找出我的图形在dp中的大小,并用dp将其缩放到屏幕密度/大小,然后用dp或dip将其定位 我的图形(方块): 图形尺寸(ldpi=50px) 以mdpi为单位的图形大小=75px 以hdpi为单位的图形大小=100px 代码中的所有其他内容都很好,只是看起来很奇怪 任何帮助都将不胜感激 Jame

我正试图用Java创建一个简单的android应用程序,但我遇到了一个困难

我有一个数组列表,其中包含许多位图,我正在将它们绘制到画布上,但我使用的是像素的度量,这在大多数设备上都不正确

那么,有没有办法找出我的图形在dp中的大小,并用dp将其缩放到屏幕密度/大小,然后用dp或dip将其定位

我的图形(方块):

图形尺寸(ldpi=50px)

以mdpi为单位的图形大小=75px

以hdpi为单位的图形大小=100px

代码中的所有其他内容都很好,只是看起来很奇怪

任何帮助都将不胜感激


James.

来自android开发者文档:

定义UI布局时应使用的虚拟像素单位,用于以与密度无关的方式表示布局尺寸或位置。 密度无关像素相当于160 dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假设的基线密度。在运行时,系统根据所用屏幕的实际密度,根据需要透明地处理dp单元的任何缩放。dp单元到屏幕像素的转换很简单:px=dp*(dpi/160)。例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。在定义应用程序的UI时,应始终使用dp单位,以确保在不同密度的屏幕上正确显示UI


有关更多信息,请参阅。

您查看了吗?只是为了取整,但您可以使用Math.round方法:int px=Math.round(dp*scale);问题是px对dp。为什么回答dp到px?你可以得到dp的逆公式:dp=px/(标度+0,5f)
/**
 * Convert dp in pixels
 * @param dp
 * @return
 */
public int getPx(int dp){       
    float scale = getResources().getDisplayMetrics().density;
    return((int) (dp * scale + 0.5f));
}