getY()行为不正确?

时间:2012-06-03 13:01:40

标签: android

我怀疑来自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();

,其中actActivity的实例,flFrameLayout的实例。

我可以补充一点,如果我们在布局上用第四个笔划中的第二个值(e.getY())绘制一些东西,它就会在手指下面。使用第三个值,它将比手指低得多。因此,我得出的结论是,系统在大多数情况下为我提供了错误的触摸y坐标值,有时会突然告诉我正确的。

我目前的解决方法是只收听e.getRaw()并减去上面计算的Android大屏幕元素高度。

所以问题是:

  1. 有没有人遇到过这个?也许运行此记录器并检查它在您的配置上打印的内容?
  2. 如果您的配置受到影响,您知道是什么原因造成的吗?也许你可以告诉更优雅的解决方法?
  3. 感谢您的关注!

0 个答案:

没有答案