【发布时间】:2013-05-29 01:58:02
【问题描述】:
我的 MotionEvent 和我的布局似乎给出了不同的位置值,我不知道为什么。我定义一个图像如下:
<ImageView
android:id="@+id/pic"
android:layout_width="17dp"
android:layout_height="17dp"
android:layout_marginLeft="72dp"
android:layout_marginTop="72dp"
android:src="@drawable/pic" />
这会将图像放置在我正在测试的模拟器上的 (144, 144) 像素处,因为它的密度为 2.0。像素位置由 log.v 确认,图像的父级只是布局。
我有一个 onTouchListener 并在 MotionEvent 中检查触摸的位置:
Log.v("pixelsX", String.valueOf(event.getX()));
Log.v("pixelsY", String.valueOf(event.getY()));
当我点击我在 XML 中设置的图像的上方和左侧时,我得到的值是 160 及以上,这显然是错误的。这将对应于 80+ 的 DP 位置,即使点击远在图像之前。
如果我尝试在点击位置 image.setX(event.getX()) 添加图像(尝试使用 setX/setY 和参数),图像将放置在点击下方约 40 像素的右侧。图像没有额外的填充或任何东西,我尝试使用不同的图像,它们之间是一致的。图像的父级始终是布局,并且布局连接到 ontouchlistener:
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_mine);
layout.setOnTouchListener(touch);
所以我无法弄清楚为什么会有这种位置差异。
【问题讨论】:
-
我不熟悉
MotionEvent,但看起来getX()/getY()返回相对于整个屏幕的X/Y位置? -
布局将是整个屏幕,不是吗?虽然我相信 getRawX() 是相对于整个屏幕的绝对位置,但无论哪种方式 getRawX() 和 getX() 返回相同的值。布局是整个屏幕,不是吗?我相信 getX() 返回与 getRawX() 相同的结果会证实这一点,因为 onTouchListener 已设置为布局。
标签: android touch-event ontouchlistener