如何将像素转换为dp?

时间:2012-03-11 19:35:29

标签: java android pixels density-independent-pixel

我正在尝试用Java创建一个简单的Android应用程序,但是我已经遇到了障碍。

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

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

我的图形(方块):

  

ldpi中的图形大小= 50px

     

图形尺寸,单位为mdpi = 75px

     

hdpi中的图形尺寸= 100px

代码中的其他所有内容都很好,除了它看起来很奇怪?

任何帮助都将不胜感激。

詹姆斯。

2 个答案:

答案 0 :(得分:7)

来自android开发者doc:

  

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

请参阅this了解详情。

答案 1 :(得分:1)

/**
 * Convert dp in pixels
 * @param dp
 * @return
 */
public int getPx(int dp){       
    float scale = getResources().getDisplayMetrics().density;
    return((int) (dp * scale + 0.5f));
}