我怀疑来自Event
的坐标是否正确。
我的应用程序在其布局中具有单个Activity
实例,其中包含根FrameLayout
元素。我正在研究Galaxy Nexus,Android 4.0.2,但我正在为Android 1.6 API编写应用程序。
现在要制作这个:
让我们覆盖onTouch()
个实例上的FrameLayout
回调并添加此记录器(e
代表event
):
Log.i("a",String.valueOf(e.getY()-e.getRawY())
+" "+String.valueOf(e.getY())
+" "+String.valueOf(e.getRawY()));
);
然后我们检查输出是什么:
06-03 16:31:50.560: I/a(15480): 0.0 676.4715 676.4715
06-03 16:31:51.326: I/a(15480): 0.0 675.4723 675.4723
06-03 16:31:51.380: I/a(15480): 0.0 680.4684 684.4653
06-03 16:31:51.388: I/a(15480): -100.0 584.4653 684.4653
06-03 16:31:51.412: I/a(15480): 0.0 686.4637 686.4637
06-03 16:31:51.412: I/a(15480): 0.0 686.4637 686.4637
看到第四次中风的奇怪波动?有趣的是,“100.0”正是上层Android OS菜单图形元素的高度(在我的例子中)。这些“100.0”可以通过这种方式从应用程序中获得:
float padding = act.instance.getWindowManager().getDefaultDisplay().getHeight()
-fl.getBottom();
,其中act
是Activity
的实例,fl
是FrameLayout
的实例。
我可以补充一点,如果我们在布局上用第四个笔划中的第二个值(e.getY()
)绘制一些东西,它就会在手指下面。使用第三个值,它将比手指低得多。因此,我得出的结论是,系统在大多数情况下为我提供了错误的触摸y坐标值,有时会突然告诉我正确的。
我目前的解决方法是只收听e.getRaw()
并减去上面计算的Android大屏幕元素高度。
所以问题是:
感谢您的关注!