Java 为什么使用ImageView';s getX、getY、setX和setY不代表相对布局中的实际值?

Java 为什么使用ImageView';s getX、getY、setX和setY不代表相对布局中的实际值?,java,android,imageview,Java,Android,Imageview,我正在尝试制作一个简单的应用程序,只是为了更好地理解如何在Android上使用触摸事件。现在,我的活动只是将ImageView移动到屏幕上触摸的坐标(MotionEvent的坐标)。我可以通过应用一个简单的技巧将图像的新位置设置为相对于图像位置的触摸坐标值(getX()和getY())。dx和dy变量负责存储该相对值,以便触摸在图像中保持恒定 现在我想在活动中放置两个ImageView,并且ImageView只有两个固定点,一旦用户将一个ImageView拖动到另一个ImageView的中心,两

我正在尝试制作一个简单的应用程序,只是为了更好地理解如何在Android上使用触摸事件。现在,我的活动只是将ImageView移动到屏幕上触摸的坐标(MotionEvent的坐标)。我可以通过应用一个简单的技巧将图像的新位置设置为相对于图像位置的触摸坐标值(
getX()
getY()
)。dx和dy变量负责存储该相对值,以便触摸在图像中保持恒定

现在我想在活动中放置两个ImageView,并且ImageView只有两个固定点,一旦用户将一个ImageView拖动到另一个ImageView的中心,两个图像就会切换位置,但要正确地执行此操作,我希望获得图像中心的真实坐标。我对代码中能够正确显示问题的部分进行了注释。正如您在创建视图时在第一张图片中所看到的那样,图像坐标只是
(0,0)
,不管它在哪里(只要初始位置定义为布局参数,如父视图中的
中心

正如您在第二张图片中所看到的以及我观察到的ImageView的
getX()
getY()
返回坐标,就像图像位于活动窗口的左上角时,图像的左上角位于显示屏的左上角一样

我想了解为什么会发生这种情况,如果有人知道如何获得ImageView的坐标,可以直接与MotionEvent的坐标进行比较


图片:


我仍然不知道为什么
getX()
getY()
setX()
、和
setY()
并不表示视图在屏幕上的位置,但我找到了如何获取视图对象在屏幕上的实际位置:
getLocationOnScreen(坐标)
。其中,
坐标
是一个2位整数数组(int[2])

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

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

image.getLocationOnScreen(img_coordinates);
然后我可以将这些坐标与触摸事件的
getRawX
getRawY
进行比较

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

x_center = (double)img_coordinates[0] + image.getWidth()/2.0;
y_center = (double)img_coordinates[1] + image.getHeight()/2.0;
我希望这对其他人也有帮助,我花了一段时间才找到这种方法,实际上我不确定这是否是最好的方法,但它确实对我有帮助