以编程方式获取ImageView相对于屏幕的位置

15
我想要以编程的方式获取我的 ImageView 的位置。我所指的位置是从屏幕顶部到该 ImageView 的像素距离。我已经尝试了stackoverflow上发布的所有其他解决方案,但对我来说都不起作用。我的最小API级别是8。
这些是我尝试过的代码 -
ImageView image = (ImageView) findViewById(R.id.imageView1);
1) image.getTop();

2) private int getRelativeTop(View myView) {
    if (myView.getParent() == myView.getRootView())
        return myView.getTop();
    else
        return myView.getTop() + getRelativeTop((View) myView.getParent());
}

3) image.getLocationOnScreen(int[] locaiton);

1
你能添加一些你尝试过的代码吗? - Carnal
@Carnal 我已经添加了代码。 - Naddy
很好,你在onCreate中使用这些方法吗? - Carnal
@Carnal 是的,我正在onCreate()方法中使用它们。 - Naddy
3个回答

50
您需要等待回调,以便在放置了子视图后布局完成。这是您需要添加到根视图的监听器,以便计算图像的坐标。否则它将返回0。

您需要等待回调,以便在放置了子视图后布局完成。这是您需要添加到根视图的监听器,以便计算图像的坐标。否则它将返回0。

getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        getViewTreeObserver().removeGlobalOnLayoutListener(this);

        int[] locations = new int[2];
        image.getLocationOnScreen(locations);
        int x = locations[0];
        int y = locations[1];
    }
});

1
非常感谢您的回答,您节省了我好几个小时..!! - Amrit Pal Singh

7

当涉及到获取View的位置时,可以使用View.getLocationOnScreen()getLocationInWindow()方法。但是需要注意的是,这些方法只有在View完成布局之后才能获得正确的位置信息。如果想要相对于父视图获得位置信息,可以使用getTop()getLeft()getBottom()getRight()


1
我用过这些,它们都返回0。我不知道为什么。 - Naddy
不应该在onCreate()中调用这些方法,尝试使用onWindowFocusChanged()。 - Canberk Ozcelik

-1
Glide.with(this)
                .asBitmap()
                .apply(requestOptions)
                .load(url)
                .placeholder(R.mipmap.img_place_holder)
                .apply(new RequestOptions().override(myImage.getMeasuredWidth(), myImage.getMeasuredHeight()))
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap,
                                                Transition<? super Bitmap> transition) {

//                        TouchImageView   myImage1 = findViewById(R.id.image_zoom_poll_card);
                        img_zoomIn.setVisibility(View.VISIBLE);

                        myImage.setImageBitmap(bitmap);

        getBitmapPositionInsideImageView(myImage, img_zoomIn);

                    }
                });

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