2

在读取一系列事件的getX()和值时,我发现这些事件将返回坐标,直到与这些坐标的某个距离阈值已通过。从那时起,将始终返回正确的坐标。getY()onTouchACTION_MOVEACTION_DOWN

重现步骤:

  1. 使用默认活动创建一个新的应用程序项目
  2. 将以下方法添加到默认活动:

    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        Log.i("getXYDelay", "(x,y)=("+event.getX() + "," + event.getY() + ")");  
        return super.onTouchEvent(event);  
    }  
    
  3. 在设备上运行并在您触摸和拖动时观看 logcat

您应该看到,在每次触摸和拖动时,getX()/getY()结果仅在您的手指移动半个中心米左右后才开始变化,并且从那时起它是准确的。

我可以看到在很多情况下这会有所帮助,但它会导致我正在编写的应用程序出现问题,所以:

  • 这种最初的滞后是否可以克服?还是可以绕过?
  • 它是特定于设备的吗?

理想情况下,我想为单个 OpenGL 表面视图关闭它。

笔记:

  • 当我使用三星 Note SPen 时不会发生这种情况。
  • 同样的情况也发生在getRawX()/getRawY().
  • 这不会发生在模拟器上,因此可能来自硬件触摸驱动程序。

更新:我假设这是由硬件驱动程序或类似级别引起的,因此超出了应用程序的控制范围。我也尝试将其发布到 android 开发人员组,但几周后,版主似乎仍然坐在我的帖子上。

4

2 回答 2

2

getX()和之间的区别getRawX()是,

getRawX()并且getRawY()保证返回相对于设备屏幕的绝对坐标。

getX()and getY(), 应该返回你的坐标,相对于派发它们的视图。

另外,您面临的问题是由于以下原因

窗口内容的布局发生在所有元素都被构造并添加到它们的父视图之后。它必须是这样的,因为在您知道 View 包含哪些组件以及它们包含什么等等之前,您没有明智的方式来布置它。

所以你得到了延迟。

于 2014-06-09T11:36:11.787 回答
0

我找到了一种解决方法,你可以在这里找到它:

于 2014-09-04T14:08:08.117 回答