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