有很多关于 MotionEvent.getX/.getY 如何“不可靠”(或其他术语)的讨论,我们应该使用这些调用的原始版本来获取坐标。
在我的 Nexus 7 上,我发现 .getX/.getY 可靠地返回交错的绝对坐标和相对坐标。换句话说,假设一个给定的 ACTION_MOVE 事件在您调用 .getX 和 .getY 时返回绝对坐标。下一个 ACTION_MOVE 事件将在其 .getX 和 .getY 调用上返回相对坐标。
这不能是偶然的行为。这也让我相信必须有一种方法来辨别给定的 ACTION_MOVE 将返回绝对坐标还是相对坐标。
有谁知道如何检查给定的 MotionEvent 对象以查看它是否在其 .getX 和 .getY 调用上返回绝对坐标与相对坐标?
编辑:根据您的要求,这是代码。没什么特别的,只是抓取坐标并移动 View 对象:
public boolean onTouch(View v,MotionEvent event) {
boolean bExitValue = true;
float fX;
float fY;
int iAction;
iAction = event.getActionMasked();
if (MotionEvent.ACTION_MOVE == iAction) {
fX = event.getX();
fY = event.getY();
v.setX(fX);
v.setY(fY);
Log.d("",("X: " + fX + ", Y: " + fY));
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
Log.d 调用和独立的浮点数不是使代码工作所必需的,但它们确实允许您在 LogCat 窗口中查看值的交错。