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