当前位置: 首页 > 面试题库 >

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

曹超
2023-03-14
问题内容

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

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

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

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

图片:

第一张照片

第二张照片


问题答案:

我仍然不知道为什么getX()getY()setX(),并setY()不能代表查看的屏幕上的位置,但我想通了,如何让屏幕上的视图对象的实际位置:getLocationOnScreen(coordinates)coordinates2位置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;

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



 类似资料:
  • 我试图在Android活动中动态创建并移动图像。然而,setX()和setY()方法似乎无法正常工作。第一次创建和放置图像时,它会正确设置图像的位置,但任何更新图像的尝试都会导致图像放置在错误的位置。例如,图像在以下代码上移动: 在动作_MOVE时,即使x和y位置值保持不变,图像也会移动。图像的父对象保持不变。大小保持不变。如果我得到x和y值,它仍然会说206,但它不再位于活动的(206206)处

  • 我正在尝试设置一个相对布局,屏幕顶部有一个工具栏,中央有一个listView。这是我的XML: 会不会是与TextView/ListView大小相关的问题?

  • 我知道线性布局中的布局权重。我可以在相对布局中分配布局权重吗? 示例:布局中的两个图像视图以60:40的比例填充布局。第一个图像应占据整个屏幕高度的60%,第二个图像必须占据剩余的40%屏幕。 不要只是回答这个例子的问题,请告诉我准确的概念,或者张贴一些关于相对布局中布局权重的参考链接。提前感谢。

  • ![我已经以线性布局(下面给出的代码)对其进行了编码,但想知道如何使用相对布局进行相同的操作,或者这只是一个考虑到布局的坏主意? 线性布局 - ][1] 使用相对布局时,我的ImageView不会显示在屏幕上:

  • 本文向大家介绍相对布局和绝对布局,position:relative和obsolute。相关面试题,主要包含被问及相对布局和绝对布局,position:relative和obsolute。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 相对定位relative: 如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。

  • 我使用DrawerLayout,最近我想改变抽屉布局中listView的重力。但是在我从将listView的重力更改为后,抽屉布局无法锁定 setDrawerLockMode()工作; ` 有什么线索可以解释为什么我不能在其他引力中使用锁定模式吗? 谢谢