在阅读一系列getX()
个事件的getY()
和onTouch
值时,我发现ACTION_MOVE
个事件会返回ACTION_DOWN
个坐标,直到已经通过了这些坐标的特定距离阈值。从那时起,将始终返回正确的坐标。
重现的步骤:
将以下方法添加到默认活动:
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i("getXYDelay", "(x,y)=("+event.getX() + "," + event.getY() + ")");
return super.onTouchEvent(event);
}
在设备上运行并在触摸并拖动
您应该看到,在每次触摸和拖动时,getX()
/ getY()
结果仅在您的手指移动了半个中心计左右后才开始变化,从那时起它就是准确的。< / p>
我可以看到在很多情况下这会有所帮助,但它会导致我写的应用程序出现问题,所以:
理想情况下,我想关闭一个OpenGL表面视图。
注意:
getRawX()/getRawY()
也是如此。更新:我假设这是由硬件驱动程序或类似级别引起的,因此超出了应用程序的控制范围。我也尝试将此帖子发布到Android开发者小组,但几周之后,主持人似乎还在我的帖子上。
答案 0 :(得分:2)
getX()
和getRawX()
之间的区别是,
getRawX()
和getRawY()
保证相对于设备屏幕返回绝对坐标。
getX()
和getY()
时,应该返回相对于调度它们的坐标。
此外,您遇到的问题是由于以下原因
在构造所有元素并将其添加到父视图之后,窗口内容的布局会发生。它必须是这样的,因为除非你知道View包含哪些组件,包含它们包含什么等等,否则没有明智的方法可以解决它。
所以你得到了延迟。
答案 1 :(得分:0)
我找到了一种解决方法,你可以找到它here: