Android 理解密度无关性

Android 理解密度无关性,android,canvas,Android,Canvas,我需要帮助理解这个主题。我曾多次尝试在Android上开发一些东西,但每次我都被困在这一点上 目前我有两个虚拟设备: 480x800 mdpi 480x800 hdpi 现在在我的画布视图中,我想画一个矩形 canvas.drawRect(0,0,100,100) 因此,结果是: mdpi rect为100px(用gimp测量尺寸) hdpi rect为88px(用gimp测量尺寸) 所以我的问题是,如果我想让这个矩形移动,并控制与屏幕限制的冲突,我如何得到从密度应用的比例因子,我如何得

我需要帮助理解这个主题。我曾多次尝试在Android上开发一些东西,但每次我都被困在这一点上

目前我有两个虚拟设备:

  • 480x800 mdpi
  • 480x800 hdpi
现在在我的画布视图中,我想画一个矩形 canvas.drawRect(0,0,100,100)

因此,结果是:

  • mdpi rect为100px(用gimp测量尺寸)
  • hdpi rect为88px(用gimp测量尺寸)
所以我的问题是,如果我想让这个矩形移动,并控制与屏幕限制的冲突,我如何得到从密度应用的比例因子,我如何得到矩形的最终大小是88px而不是100px


扩展:从这一点上看,两个设备中的rect大小是否都可能是100px?实现这一点的公式是什么?

实际上,两台设备上的矩形宽度都是100像素。您实际测量的是矩形的物理宽度

困惑?让我解释一下:

矩形在两个设备上都被精确地绘制为100px宽。它们具有相同的屏幕分辨率,但其中一个具有较低的密度,以dpi(=每英寸点数)或有时以ppi(=每英寸像素)测量。(在Android中,您可能已经知道mdpi表示中等dpi(~160dpi),hdpi表示高dpi(~240dpi)) 现在,dpi只是一个像素的物理大小,而不是说有160个像素/英寸,你也可以说一个像素有0.5英寸大。 这意味着您绘制的矩形的物理大小是一个像素的矩形大小的宽度。此外,屏幕的宽度是一个像素大小的分辨率。(实际上,mdpi设备的屏幕应该比hpdi设备的屏幕小)

发生的情况是仿真器将监视器的dpi考虑在内,并相应地缩放设备。对于mdpi设备,只需将一个设备像素转换为一个监视器像素,对于hdpi设备,一个设备像素等于0.88个监视器像素

换句话说,如果这些是真的手机,mdpi的屏幕会更大,尽管两者的分辨率相同。rect在两个屏幕上的宽度都是100px,但由于mdpi手机上的像素更大,所以rect在物理上更大。因此,监视器上的像素实际上是rect的物理大小


如果您仍然不知道我在说什么,请阅读关于在android中支持不同屏幕的文章。

实际上,两台设备上的矩形宽度都是100像素。您实际测量的是矩形的物理宽度

困惑?让我解释一下:

矩形在两个设备上都被精确地绘制为100px宽。它们具有相同的屏幕分辨率,但其中一个具有较低的密度,以dpi(=每英寸点数)或有时以ppi(=每英寸像素)测量。(在Android中,您可能已经知道mdpi表示中等dpi(~160dpi),hdpi表示高dpi(~240dpi)) 现在,dpi只是一个像素的物理大小,而不是说有160个像素/英寸,你也可以说一个像素有0.5英寸大。 这意味着您绘制的矩形的物理大小是一个像素的矩形大小的宽度。此外,屏幕的宽度是一个像素大小的分辨率。(实际上,mdpi设备的屏幕应该比hpdi设备的屏幕小)

发生的情况是仿真器将监视器的dpi考虑在内,并相应地缩放设备。对于mdpi设备,只需将一个设备像素转换为一个监视器像素,对于hdpi设备,一个设备像素等于0.88个监视器像素

换句话说,如果这些是真的手机,mdpi的屏幕会更大,尽管两者的分辨率相同。rect在两个屏幕上的宽度都是100px,但由于mdpi手机上的像素更大,所以rect在物理上更大。因此,监视器上的像素实际上是rect的物理大小


如果您仍然不知道我在说什么,请阅读关于在android中支持不同屏幕的文章。

我仍然不知道您在说什么,但我感谢您为我解释这一点所做的努力,我将进一步研究引用的文章。谢谢@德尔德里,再试试:tl;dr is 100px可以是1英寸,也可以是100英寸,这取决于一个像素的大小。昨天我无法理解,但今天我再次阅读了你的帖子,现在我终于理解了。非常感谢你!我仍然不知道你在说什么,但我感谢你为我解释它所做的努力,我将进一步研究引用的文章。谢谢@德尔德里,再试试:tl;dr is 100px可以是1英寸,也可以是100英寸,这取决于一个像素的大小。昨天我无法理解,但今天我再次阅读了你的帖子,现在我终于理解了。非常感谢你!