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

时间:2013-10-21 14:36:08

标签: android android-layout

我希望以编程方式获取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);

3 个答案:

答案 0 :(得分:46)

当布局包含子视图时,您需要等待回调。这是您需要添加到根视图以便计算图像坐标的侦听器。否则它将返回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 :(得分:7)

在布局视图后,使用View.getLocationOnScreen()getLocationInWindow() 但仅限getTop()getLeft()getBottom()getRight()返回相对于其父级的位置。

答案 2 :(得分:0)

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);

                    }
                });