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 像素不会转换为图像坐标