加载图像后测量ImageView

时间:2016-01-04 06:57:17

标签: android android-layout imageview picasso android-glide

我试图找到一种方法来测量使用Glide或Picasso(或其他任何东西)将图像加载到其中后SELECT r.* , b.* , b.number_of_seat - (SELECT sum(number_of_seat) FROM booking GROUP BY booking.bus_routine_id) - (SELECT sum(number_of_reserved_seat) FROM reserved_seats GROUP BY reserved_seats.routine_id) AS available_seat FROM bus_routines AS r INNER JOIN buses AS b ON b.id = r.bus_id WHERE r.sector_from = "KTM" AND r.sector_to = "PKR" AND r.departure_date = "2015-12-15" HAVING available_seat > 0 。基本上,我试图在某些位置在图像顶部布局其他视图,但需要最终的ImageViews尺寸才能准确地完成。

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

ImageView

并将图片加载到<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> 。这些都在根FrameLayout内部,但我认为不重要。

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

滑翔

.getHeight()

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

2 个答案:

答案 0 :(得分: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(); 
    } 
});

答案 1 :(得分:1)

使用图像视图创建自定义类。 在图像视图中使用此onMeasure我们可以获得高度和宽度

protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

if (mNeedsInitialScale) { // Set by setImage when a new image is set
    // The measured width and height were set by super.onMeasure above
    setInitialScale(getMeasuredWidth(), getMeasuredHeight());
    mNeedsInitialScale = false;
}

}