9

我正在尝试制作一个简单的应用程序,只是为了更好地了解如何在 Android 上使用 Touch 事件。现在,我的 Activity 只是将 ImageView 移动到屏幕上触摸的坐标(MotionEvent 的坐标)。getX()我可以通过应用一个简单的技巧来将图像的新位置设置为一个由相对于图像位置的触摸坐标(和getY())组成的值来设法做到这一点。dxdy变量负责存储这些相对值,因此触摸在图像中保持不变。

现在我想将 2 个 ImageViews 放在 Activity 中,并且只有两个 ImageViews 固定点,一旦用户将一个 ImageView 拖到另一个 ImageView 的中心,这两个图像就会切换位置,但是要正确地做到这一点,我想获得真实的坐标的图像中心。我评论了代码中使其正常工作以显示问题的部分。正如您在创建视图时的第一张图片中看到的那样,图像坐标很简单(0, 0),无论它在哪里(只要将初始位置定义为布局参数,如CENTER_IN_PARENT)。

正如您在第二张图片中看到的那样,据我观察 ImageViewgetX()getY()返回坐标,就好像当图像位于左上角时,图像的左上角位于 DISPLAY 的左上角的活动窗口。

我想了解为什么会发生这种情况,以及是否有人知道如何实际获取 ImageView 的坐标,该坐标可以直接与 MotionEvent 的坐标进行比较。


图片:

第一张照片

第二张图片

4

1 回答 1

14

我仍然不知道为什么getX(), getY(), setX(),setY()也不代表 View 在屏幕上的位置,但我想出了如何获取屏幕上视图对象的实际位置:getLocationOnScreen(coordinates). 哪里coordinates是 2 位置 int 数组(int[2])。

例如,要获得与 ImageView 左上角对应的实际值,image我只需要执行以下操作:

int[] img_coordinates = new int[2];
ImageView image = (ImageView) findViewById(R.id.myImage);

image.getLocationOnScreen(img_coordinates);

然后我实际上可以将这些坐标与 Touch-event 的getRawX和进行比较getRawY

如果我想获得我的观点的中心点,我只需要这样做:

x_center = (double)img_coordinates[0] + image.getWidth()/2.0;
y_center = (double)img_coordinates[1] + image.getHeight()/2.0;

我希望这对其他人也有帮助,我花了一段时间才找到这种方法,实际上我不确定这是否是最好的方法,但它对我有用。

于 2013-07-09T17:45:20.320 回答