我正在开发一个Android应用程序,它需要处理屏幕上的点击并将它们转换为地图上的地理位置。为此我有一个辅助方法,可以帮助我调整水龙头在屏幕上的实际位置注册的点。因此,我有这段代码:
int[] offset = new int[2];
getLocationInWindow(offset);
point.x += offset[0];
point.y += offset[1];
这段代码完全符合我的要求并且已经完成了大约2 - 3年。应用程序在这段时间内正确处理了这些翻译。但是,出于某种原因,HTC One出现了问题,我们最近试图对其进行测试。我认为它的方式可能与Android 4.3相关(因为它是我们唯一的4.3设备)或者与One在屏幕上有一个软按钮这一事实有关。我遇到的问题是,每次登记的触摸都会比预期的低20到20个像素。这种差异总是在底部,但就像我说的那样我可以重现它的唯一设备就是这个设备。
我尝试过使用getLocationOnScreen,我也已经有了这个代码:
Rect r = new Rect();
getHitRect(r);
point.x += r.left;
point.y += r.top;
所有这些导致同样的问题。我试图做的任何其他调整似乎解决了这个问题,但在所有其他测试设备上产生相反的问题。我的选择已经用完了。