Java Android的像素定位是可行的,但不应该';T

Java Android的像素定位是可行的,但不应该';T,java,android,pixel,Java,Android,Pixel,我一直在使用像素在曲面视图上定位对象(位图、文本)。例如,为了使某个东西居中,我将取代表屏幕的矩形宽度和高度的一半。屏幕宽度和高度按预期返回。我的手机(480*800)报告可用屏幕为442*800,密度为1.5,在240*320模拟器上运行时,可用屏幕报告为221*320,密度为0.75。一切如期而至 但是这些值,当然,是像素,所以我应该先乘以密度因子,然后再减半。奇怪的是,在低分辨率模拟器和我的高分辨率手机上,一切都完美地集中在一起。这对我来说毫无意义 在两个屏幕上,为了使文本显示相同,我使用

我一直在使用像素在曲面视图上定位对象(位图、文本)。例如,为了使某个东西居中,我将取代表屏幕的矩形宽度和高度的一半。屏幕宽度和高度按预期返回。我的手机(480*800)报告可用屏幕为442*800,密度为1.5,在240*320模拟器上运行时,可用屏幕报告为221*320,密度为0.75。一切如期而至

但是这些值,当然,是像素,所以我应该先乘以密度因子,然后再减半。奇怪的是,在低分辨率模拟器和我的高分辨率手机上,一切都完美地集中在一起。这对我来说毫无意义

在两个屏幕上,为了使文本显示相同,我使用密度缩放值设置大小,正如我所期望的那样,这是有效的

在清单中,我声明支持所有屏幕大小(尽管在我这么做之前我也看到了相同的“正确”行为)


为什么像素值“工作”,而我不调整它们的密度?我现在很困惑

一个像素就是一个像素就是一个像素

它是屏幕和尺寸的最低公分母

密度是将多少像素压缩成一个度量单位,通常为一英寸。在实物显示器上

例如,采用5英寸的物理宽度,分辨率为500x1000,得到的密度为200dpi(5英寸中的1000像素)。物理宽度为4英寸,分辨率相同,密度为250dpi(4英寸1000像素)


x=500(宽度的一半)是两个屏幕的中心,与密度无关。事实上,对于任何大小、任何密度的屏幕,以像素为单位的宽度的一半就是屏幕的中心。

我并不反对这一点。我的观点是,位置是在dps中指定的,或者更确切地说,它们并不像证据所显示的那样。你是说矩形等的坐标应该以像素为单位吗?这难道不使得编写代码在不同的设备上合理地定位事物变得困难吗?我可能会感到困惑。你开始说“我一直在用像素在表面视图上定位东西(位图、文本)。”我假设你在用原始像素定位东西,如果你在测量设备并做数学计算,这很好。还是我完全没有抓住要点?请记住,DIP(或DP)和DPI是完全不同的东西,不是像素(尽管名称为DIP-它是一个比率)。我一直在使用原始像素,一切都很好,但后来我突然意识到它“不应该”工作(虽然很明显是这样,因此我感到困惑)。但是,我想我已经知道了。这个系统预期的坐标是像素的(自然的)。如果我想要在屏幕中间加上“一点”,那么在不同的分辨率屏幕上让那个“位”看起来“相同”,我需要调整密度的“位”,然后把它添加到中心的像素位置,这显然必须保持不变。就像通常的情况一样,大声说出来(在这种情况下写出来)会让钱掉下来。因此,以像素为单位的宽度的一半表示圆的中间,但如果减去50个像素(使球的左侧正确),则球的大小将遍布整个区域。缩放偏移量是一种方法。很高兴钱掉了(我记得我第一次不得不解决这个问题时,花了好几天时间在一个应用程序上)。干杯,我应该先睡一觉,或者试着用奶酪植物什么的把它说出来。非常感谢。。。