15

我想以ImageView编程方式获得我的位置。通过位置,我的意思是从屏幕顶部到我已经尝试过在stackoverflow中发布的所有其他解决方案的像素距离,ImageView.但它对我不起作用。我的最低 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);
4

3 回答 3

50

当布局与子视图一起放置时,您需要等待回调。这是您需要添加到根视图以计算图像坐标的侦听器。否则它将返回 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];
    }
});
于 2013-10-21T14:48:19.690 回答
7

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

于 2013-10-21T14:44:56.883 回答
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);

                    }
                });
于 2020-06-25T09:43:19.193 回答