2011-06-04 86 views
16

我有以下情况:MotionEvent杰蒂()和信息getX()返回不正确的值

我有连续的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边界之上)。

希望,我解释清楚..

任何想法如何得到这个坐标相对于屏幕尺寸是多少? 谢谢。

+0

另请参见[MotionEvent.getRawX和MotionEvent.getX之间的区别](http://stackoverflow.com/questions/20636163/difference-between-motionevent-getrawx-and-motionevent-getx) – Suragch 2016-09-20 07:23:22

回答

43

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

+0

它有帮助,谢谢 – glodos 2011-06-04 15:36:48

+0

@kcoppock你节省了ma小时的时间.. Thankyou非常亲爱的...... – 2015-08-22 09:17:06

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。

+0

不错。谢谢。 – hariszhr 2017-04-09 21:00:10