【问题标题】:Android getX/getY interleaves relative/absolute coordinatesAndroid getX/getY 交错相对/绝对坐标
【发布时间】:2013-05-16 13:55:03
【问题描述】:

关于 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 窗口中查看值的交错。

【问题讨论】:

  • 能否请您在检查此行为的地方发布您的代码?
  • 上面添加的代码,谢谢。如果您运行此程序并非常缓慢地移动手指,您一次可以获得一个坐标对 - 它们将在“X:59.509125,Y:75.56683”和“X:356.14337,Y:489.77722”之类的值之间交替。非常不同的坐标对,但奇数和偶数集将彼此一致。这几乎就像两根手指向下(虽然这不是 MotionEvent 报告多点触控的方式)。
  • 如果在输出中添加getHistoricalX/Y 会发生什么?也许只有在存在历史数据时才返回相对坐标?
  • 有趣:我注释掉了对 v.setX 和 v.setY 的调用(因此视图不会移动)并且交错坐标停止了。我现在得到的只是相对坐标!重新定位视图和 MotionEvents 之间似乎存在联系。还在挖....
  • 我以前不得不处理过这个问题。问题是您正在重新定位视图然后获取新的相对坐标,这会导致跳跃值。 AFAIK、getX()getY() 总是返回相对坐标。请在此处查看我对此问题的解决方案:stackoverflow.com/a/17549458/2448305

标签: android graphics touch coordinates game-physics


【解决方案1】:

我发现,galaxy s 4 上的 getY 和 getRawY 都是错误的。但它们以正交的方式变化。所以你可以通过下面的代码得到正确的值:

rawY = event.getRawY() - spaceOverLayout;
normalY = event.getY();
y = 0F;

float prozentPosition = ((rawY + normalY) / 2) / height;
y = (normalY * (1 - prozentPosition)) + (rawY * prozentPosition);

希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多