在Android布局中获取ImageView的位置

10
请帮助我获取布局中 ImageView 的位置。

输入图片描述

5个回答

16
x = imageViewObject.getLeft();
y = imageViewObject.getTop();
希望它能帮到你!

3
对我没有用。所有的结果都是零。(使用按钮而不是ImageView,但这不应该有任何区别。) - mathheadinclouds
@mathheadinclouds 对我也不起作用。你有找到解决方法吗? - DIRTY DAVE
还没有解决方案吗?对我来说也是0。 - Johannes Pertl

7

在运行时,您可以使用以下方法获取每个View对象(包括Layouts)的位置:

getLeft():视图对象的左侧位置

getTop():视图对象的顶部位置

getRight():视图对象的右侧位置

getBottom():视图对象的底部位置

您甚至可以使用以下方法获取位置:

getLocationOnScreen(int [] )


7
您可以使用 getLocationOnScreen(int []) 来实现此功能。

不起作用。我的图像位于RelativeLaoyout中,它与顶部的一个按钮相关,并与右侧对齐。 - Lasitha Lakmal

1

位置意味着x和y以及高度和宽度?

这个布局是一个视图,该视图具有这些属性。


我想在视图上获取当前位置的x和y坐标,以便我可以从这个位置动画到另一个位置。 - Programmer
查看View类中可用的方法。 - JoxTraex

0

以下代码对我有效,我使用全局布尔变量movedonTouch方法中找到值。 v.getX()v.getY()获取我的imageView对象的值。我已在设备上运行了我的apk文件,它完美地工作。希望这可以帮助到您。

  joystick.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(moved){
                moved = false;
                xOrigin = v.getX();
                yOrigin = v.getY();
                mode.setText(Float.toString(xOrigin));
                challenge.setText(Float.toString(yOrigin));
            }
            mode.setText(Float.toString(v.getX()));
            challenge.setText(Float.toString(v.getY()));
            switch (event.getActionMasked()) {
                case MotionEvent.ACTION_DOWN:
                        xCoOrdinate = v.getX() - event.getRawX();

                    yCoOrdinate = v.getY() - event.getRawY();
                    //mode.setText(Float.toString(v.getX()));
                    //challenge.setText(Float.toString(v.getY()));
                    break;
                case MotionEvent.ACTION_MOVE:
                    v.animate().x(event.getRawX() + xCoOrdinate).y(event.getRawY() + yCoOrdinate).setDuration(0).start();
                    if(v.getX() < xOrigin -50){
                        v.animate().x(xOrigin -50).setDuration(0).start();
                    }
                    else if(v.getX() > xOrigin +50) {
                        v.animate().x(xOrigin +50).setDuration(0).start();
                    }
                    if(v.getY() < yOrigin -50){
                        v.animate().y(yOrigin -50).setDuration(0).start();
                    }
                    else if(v.getY() > yOrigin +50) {
                        v.animate().y(yOrigin +50).setDuration(0).start();
                    }
                    break;
                default:
                    v.setX(xOrigin);
                    v.setY(yOrigin);
                    mode.setText(Float.toString(xOrigin));
                    challenge.setText(Float.toString(yOrigin));
                    return false;
            }
            return true;
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接