我正在尝试用Java创建一个简单的Android应用程序,但是我已经遇到了障碍。
我有一个包含许多位图的数组列表,我正在将它们绘制到画布上,但我使用的是像素的测量值,而这在大多数设备上并不正确。
那么有没有办法找到我的图形在dp中的大小,并用dp将其缩放到屏幕密度/大小,并用dp或dip进行定位。
我的图形(方块):
ldpi中的图形大小= 50px
图形尺寸,单位为mdpi = 75px
hdpi中的图形尺寸= 100px
代码中的其他所有内容都很好,除了它看起来很奇怪?
任何帮助都将不胜感激。
詹姆斯。
答案 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));
}