有很多关于 MotionEvent.getX/.getY 不可靠的讨论(或其他术语),我们应该使用这些调用的 Raw 版本来获取坐标。
在我的 Nexus 7 上,我发现 .getX/.getY 可靠地返回交替的绝对和相对坐标。换句话说,假设给定的 ACTION_MOVE 事件在调用 .getX 和 .getY 时返回绝对坐标。下一个 ACTION_MOVE 事件将在其 .getX 和 .getY 调用中返回相对坐标。
这不可能是意外行为。这也使我相信必须有一种方法可以确定给定的 ACTION_MOVE 是否将在其 .getX 和 .getY 调用中返回绝对或相对坐标。
有人知道如何检查给定的 MotionEvent 对象以查看它是否在其 .getX 和 .getY 调用中返回绝对与相对坐标吗?
编辑:根据您的要求,以下是代码。它并没有什么特别之处,只需获取坐标并移动 View 对象:
在我的 Nexus 7 上,我发现 .getX/.getY 可靠地返回交替的绝对和相对坐标。换句话说,假设给定的 ACTION_MOVE 事件在调用 .getX 和 .getY 时返回绝对坐标。下一个 ACTION_MOVE 事件将在其 .getX 和 .getY 调用中返回相对坐标。
这不可能是意外行为。这也使我相信必须有一种方法可以确定给定的 ACTION_MOVE 是否将在其 .getX 和 .getY 调用中返回绝对或相对坐标。
有人知道如何检查给定的 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窗口中看到值的交错。
getX()
和getY()
始终返回相对坐标。请在此处查看我解决此问题的方法:https://dev59.com/YnTYa4cB1Zd3GeqPsDYB#17549458 - Ben Kane