MotionEvent的getY()和getX()返回错误的值

19

我有以下情况:

我有一个带有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返回相对于ListView中ImageView的位置,而不是相对于整个ListView的位置(我认为是这样)。因此,当我触摸中间的项并向上滑动手指时,getY返回负值(在ImageView边界之上)。

希望我解释得清楚。

有什么办法可以获得相对于屏幕尺寸的这些坐标呢? 谢谢。


3个回答

49

尝试使用getRawX()getRawY()代替getX()getY()


在我的情况下,使用simpleselection的recycleview中的ViewHolder中的onTouchListener取消运动事件时,y和rawY都是不正确的。 - coolcool1994

6

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()对我没有帮助。 - grenzfrequence

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接