gpt4 book ai didi

java - 为什么ImageView的getX、getY、setX、setY在RelativeLayout中不代表实际值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:48 27 4
gpt4 key购买 nike

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

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

正如您在第二张图片中看到的,据我观察,ImageView 的getX()getY() 返回坐标为当图像位于 Activity 窗口的左上角时,如果图像的左上角位于显示的左上角。

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


图片:

FIRST PICTURE

SECOND PICTURE

最佳答案

我仍然不明白为什么要使用 getX()getY()setX()setY( ) 不代 TableView 在屏幕上的位置,但我想出了如何获取 View 对象在屏幕上的实际位置:getLocationOnScreen(coordinates)。其中 coordinates 是一个 2 位整数数组 (int[2])。

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

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

image.getLocationOnScreen(img_coordinates);

然后我实际上可以将这些坐标与触摸事件的 getRawXgetRawY 进行比较。

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

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

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

关于java - 为什么ImageView的getX、getY、setX、setY在RelativeLayout中不代表实际值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com