Android getX/getY 交错相对/绝对坐标

标签 android graphics touch coordinates game-physics

有很多关于 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 调用和独立 float 对于使代码正常工作不是必需的,但它们确实允许您在 LogCat 窗口中查看值的交错。

最佳答案

我发现,在 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);

希望对您有所帮助。

关于Android getX/getY 交错相对/绝对坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676097/

相关文章:

c# - WPF 中的像素着色器效果

javascript - 检查触摸设备上的scrollTop

ios - SwiftUI 将触摸事件从 UIViewControllerRepresentable 传递给 View 后面

javascript - Windows 8 Metro 风格应用程序 - 查找基于鼠标或触摸的执行

Android Fragment Webview 内存泄漏

android - 是否可以制作 Google Photos 风格的搜索栏?

android - 如何在录制时发送 mp4 的可读部分

Java Jpanel setBounds 不工作

android - 从任意 SD 卡文件夹中读取

c++ - 同一个浮点计算的不同结果