Android:getX getY初始延迟

时间:2014-06-02 09:51:34

标签: java android touch samsung-mobile-sdk

在阅读一系列getX()个事件的getY()onTouch值时,我发现ACTION_MOVE个事件会返回ACTION_DOWN个坐标,直到已经通过了这些坐标的特定距离阈值。从那时起,将始终返回正确的坐标。

重现的步骤:

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

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

  4. 时观看logcat

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

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

    • 这个最初的延迟是否过度了?或者它可以被绕过吗?
    • 具体是设备吗?

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

    注意:

    • 当我使用Samsung Note SPen时,它不会发生。
    • getRawX()/getRawY()也是如此。
    • 这不会发生在仿真器上,因此可能来自硬件触摸驱动程序。

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

2 个答案:

答案 0 :(得分:2)

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

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

getX()getY()时,应该返回相对于调度它们的坐标。

此外,您遇到的问题是由于以下原因

在构造所有元素并将其添加到父视图之后,窗口内容的布局会发生。它必须是这样的,因为除非你知道View包含哪些组件,包含它们包含什么等等,否则没有明智的方法可以解决它。

所以你得到了延迟。

答案 1 :(得分:0)

我找到了一种解决方法,你可以找到它here