为什么ImageView的getX,getY,setX和setY不能表示相对布局中的实际值?

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

现在我想在活动中放置2个ImageViews,并且只有两个ImageViews的固定点,一旦用户拖动一个ImageView到另一个ImageView的中心,两个图像切换位置,但要正确地做到这一点,我想获得真正的坐标的图像中心。 我评论了代码中能够正确显示问题的部分。 正如您在创build视图时在第一张图片中所看到的,图像坐标只是(0, 0) ,无论它在哪里(只要初始位置被定义为像CENTER_IN_PARENT这样的布局参数)。

正如你可以在第二张图片中看到的一样,据我观察ImageView的getX()getY()返回坐标,就好像图像的左上angular在图像位于DISPLAY的左上angular在ACTIVITY WINDOW的左上angular。

我想了解为什么发生这种情况,如果有人知道如何实际得到ImageView的坐标,可以直接比较MotionEvent的坐标。


图片:

第一张照片

第二张照片

Solutions Collecting From Web of "为什么ImageView的getX,getY,setX和setY不能表示相对布局中的实际值?"

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

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

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

然后,我实际上可以将这些坐标与Touch事件的getRawXgetRawY

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

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

我希望这也能帮助其他人,我花了一段时间才find这种方法,实际上我不确定这是否是最好的方法,但它对我来说是个诀窍。