我需要帮助理解这个主题。我多次尝试在Android上开发一些东西,每次都遇到困难。
目前我有两个虚拟设备:
现在在我的视图中使用画布我想要绘制一个矩形 canvas.drawRect(0,0,100,100);
结果如下:
所以我的问题是,如果我想让这个矩形移动并控制与屏幕限制的碰撞我如何得到已经从密度应用的比例因子,我怎么得到我的rect的最终大小是88px而不是100px的?
扩展:从这一点来看,两个设备中的矩形大小可能是100px吗?实现这个目标的公式是什么?
答案 0 :(得分:0)
实际上,两个设备上的矩形正好是100px宽。你实际测量的是矩形的物理宽度。
困惑?让我解释一下:
矩形在两个设备上绘制为100px宽。它们具有相同的屏幕分辨率,但其中一个具有较低的密度,以 dpi (=每英寸点数)或有时ppi(=每英寸像素数)来衡量。 (在Android中,您可能已经知道 mdpi 表示中等dpi (~160dpi), hdpi 表示高dpi (〜240dpi)) 现在,dpi只不过是一个像素的物理尺寸,而不是说有160像素/英寸,你也可以说一个像素是0.几英寸大。 这意味着您绘制的矩形的物理大小是一个像素的rect 大小的宽度。此外,屏幕的宽度是一个像素的px 大小的分辨率。 (实际上,mdpi设备的屏幕应该显示小于hpdi设备的屏幕)
模拟器会将您的显示器dpi考虑在内并相应地扩展设备。对于你的mdpi设备,它只是将一个设备像素转换为一个监视器像素,对于hdpi设备,一个设备像素等于0.88监视器像素。
换句话说,如果这些是真正的手机,mdpi将拥有更大的屏幕,尽管两者都具有相同的分辨率。矩形在两者上都是100px宽,但由于mdpi手机上的像素较大,因此矩形物理更大。因此,显示器上的像素实际上是矩形的物理大小。
如果您仍然不知道我在谈论什么,请阅读this有关支持Android中不同屏幕的文章。