加载图像后测量ImageView

Orb*_*bit 3 android imageview android-layout picasso android-glide

我试图找到一种方法来衡量一个ImageView图像后使用Glide或Picasso(或任何真正的东西)加载到它.基本上,我试图在某些位置在图像顶部布局其他视图,但需要最终的ImageViews尺寸才能准确地完成.

我不知道用于尝试这样做的最佳布局是什么,但我目前正在使用这个:

<FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/viewingImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </FrameLayout>
Run Code Online (Sandbox Code Playgroud)

并将图像加载到viewingImageView.这些都在根FrameLayout内部,但我不认为这很重要.

这是我最近的尝试,但是作为评论,使用.getWidth().getHeight()在ImageView上返回0.资源的宽度/高度返回原始图像的大小.

滑行

.with(this)
.load(entry.getImageUrl())
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
        mImageView.setImageBitmap(resource);

        int width = mImageView.getMaxWidth(); //prints 0
        int height = mImageView.getMaxHeight(); //prints 0
        int resw = resource.getWidth(); //returns original image width
    }
});
Run Code Online (Sandbox Code Playgroud)

那么如何加载图像然后在加载图像后测量ImageView(或其包装FrameLayout)?或者如果可能的话,测量最终布局图像的尺寸会更好,因为我知道图像并不总是根据比例类型填充整个ImageView.我对任何解决方案持开放态度,以上只是我迄今为止所尝试的内容.

Mar*_*rko 5

你应该等待绘制视图,你可以OnGlobalLayoutListener像这样使用

ViewTreeObserver vto = mImageView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        this.mImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 

        // Get the width and height
        int width  = mImageView.getMeasuredWidth();
        int height = mImageView.getMeasuredHeight(); 
    } 
});
Run Code Online (Sandbox Code Playgroud)