我的 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);
所以我无法弄清楚为什么会有这种位置差异。