我有以下情况:
我有一个自定义ListView连接ImageView和TextView。 ImageView有一个onTouchListener,wchich调用我的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 :(得分:47)
尝试使用getRawX()
和getRawY()
代替getX()
和getY()
。
答案 1 :(得分:4)
getX()和getY()返回与调用它的视图相对应的值。 于是 让我们说吧,
ImageView imV = (ImageView)findViewById(R.id.image_view);
然后你可以使用
获得x,yx = imV.getX() + event.getX();
y = imV.getY() + event.getY();
这里我假设你已经在imV上设置了onTouchListener。
答案 2 :(得分:0)
这是完整答案。这将捕获临时变量https://stackoverflow.com/a/54438485/1931228
上的最后3个事件