繁体   English   中英

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

[英]Android getX/getY interleaves relative/absolute coordinates

关于MotionEvent.getX / .getY如何“不可靠”(或其他术语)的讨论很多,我们应该使用这些调用的Raw版本来获取坐标。

在我的Nexus 7上,我发现.getX / .getY可靠地返回交错的绝对坐标和相对坐标。 换句话说,当您调用.getX和.getY时,给定的ACTION_MOVE事件会返回绝对坐标。 然后,下一个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窗口中查看值的交错。

我发现,在银河系4的getY和getRawY都错了。 但它们以正交方式改变。 因此,您可以通过以下代码获得正确的值:

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

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

希望它会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM