MotionEvent GetY() 和 getX() 返回不正确的值

Posted

技术标签:

【中文标题】MotionEvent GetY() 和 getX() 返回不正确的值【英文标题】:MotionEvent GetY() and getX() return incorrect values 【发布时间】:2011-09-08 09:28:48 【问题描述】:

我有以下情况:

我有一个带有 ImageView 和 TextView 的自定义 ListView。 ImageView 有一个 onTouchListener,它调用我的 onTouch 方法。以下是其中的一些内容:

if (event.getAction()==MotionEvent.ACTION_MOVE) 
    layout.leftMargin = (int) event.getX() - dragIcon.getWidth()/2;         
    layout.topMargin = (int) event.getY() - dragIcon.getHeight()/2;
    //Log.d("Tag", "Pozycja: " +  event.getX() +", "+  event.getY());

dragIcon.setLayoutParams(layout);

当检测到移动时,我正在显示新图像(不是在 ListView 中)并且我开始根据 x 和 y 坐标移动它。

问题是,getX 和 getY 返回相对于列表中 ImageView 的位置,而不是整个 ListView(我认为是这样)。所以当我触摸中间的一个项目并向上滑动手指时,getY 返回负值(高于 ImageView 边界)。

希望,我解释清楚了..

任何想法如何获得这个相对于屏幕尺寸的坐标? 谢谢。

【问题讨论】:

另见Difference between MotionEvent.getRawX and MotionEvent.getX 【参考方案1】:

尝试使用getRawX()getRawY() 而不是getX()getY()

【讨论】:

在我的情况下,y 和 rawY 对于取消在 ViewHolder 中的 onTouchListener 中的运动事件在 recycleview 中使用 simpleselection 是不正确的。【参考方案2】:

getX() 和 getY() 返回对应于调用它的视图的值。 因此 比方说,

ImageView imV = (ImageView)findViewById(R.id.image_view);

然后你可以得到 x,y 使用

x = imV.getX() + event.getX();
y = imV.getY() + event.getY();

这里我假设你已经在 imV 上设置了 onTouchListener。

【讨论】:

你救了我。这很好用。 getRawX()、getRawY() 对我没有帮助。【参考方案3】:

这是完整的答案。这将捕获临时变量上的最后 3 个事件:https://***.com/a/54438485/1931228

【讨论】:

以上是关于MotionEvent GetY() 和 getX() 返回不正确的值的主要内容,如果未能解决你的问题,请参考以下文章

Android:MotionEvent 的 x 和 y 像素不会转换为图像坐标

Java中的GetX,GetY方法

JSlider getX(), getY()

MotionEvent中getX()和getRawX()的区别

Android中View的getX,getY...

android MotionEvent中getX()和getRawX()的区别