我正在尝试创建一个简单的应用程序,以便更好地了解如何在Android上使用Touch事件。现在,我的Activity只是将ImageView移动到屏幕上触摸的坐标(MotionEvent的坐标)。我可以设法通过应用一个简单的技巧将图像的新位置设置为由相对于图像位置的触摸坐标(getX()
和getY()
)组成的值。 dx 和 dy 变量负责存储此相对值,因此触摸在图像中保持不变。
现在我想在Activity中添加2个ImageViews并且只有两个固定的ImageViews点,一旦用户在另一个ImageView的中心拖动一个ImageView,这两个图像会切换位置,但为了正确地做到这一点,我想得到图像中心的实际坐标。我评论了代码中使其正常工作以显示问题的部分。正如您在创建视图时在第一张图片中看到的那样,无论图像坐标位于何处(只要将初始位置定义为布局参数),图像坐标就是(0, 0)
比如CENTER_IN_PARENT
)。
正如你在第二张图片中看到的那样,据我所见,ImageView的getX()
和getY()
返回坐标,好像图像的左上角是当图像位于ACTIVITY WINDOW的左上角时,在DISPLAY的左上角。
我想了解为什么会发生这种情况,如果有人知道如何实际获取ImageView的坐标,可以直接与MotionEvent的坐标进行比较。
图片:
答案 0 :(得分:14)
我仍然不确切地知道为什么getX()
,getY()
,setX()
和setY()
不能代表屏幕上视图的位置,但我想如何在屏幕上获取视图对象的实际位置: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事件的getRawX
和getRawY
进行比较。
如果我想获得我的观点的中心点,我只需要这样做:
x_center = (double)img_coordinates[0] + image.getWidth()/2.0;
y_center = (double)img_coordinates[1] + image.getHeight()/2.0;
我希望这对其他人也有帮助,我花了一段时间才找到这种方法,我实际上不确定它是否是最好的方法,但它对我有用。