我怀疑来自Event
s 的坐标是否正确。
我的应用程序在其布局中有一个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 上屏元素高度。
所以问题是:
- 有没有人遇到过这个?也许运行这个记录器并检查它在您的配置上打印的内容?
- 如果您的配置受到影响,您知道是什么原因造成的吗?也许您可以说出更优雅的解决方法?
感谢您的关注!