来自URL的ImageView不包含具有自定义高度的内容

时间:2016-12-23 19:04:03

标签: android android-layout imageview

我使用Glide从网址加载图片,图片我得到了图像高度。当我设置高度和宽度以匹配父级时,高度太高并且图像的底部和顶部有空白空间。高度以像素为单位

这就是我设置身高的方式:

if (height != 0) {
            height = convertPixelsToDp(height, mContext);
            ViewGroup.LayoutParams params = viewHolder.listphoto.getLayoutParams();
            params.height = height;
            params.width = ViewGroup.LayoutParams.MATCH_PARENT;
            viewHolder.listphoto.setLayoutParams(params);
}

XML:

         <ImageView
                android:id="@+id/listphoto"
                android:adjustViewBounds="true"
                android:layout_width="match_parent"
                android:background="#dddddd"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                />

我尝试过使用adjustViewBounds和scaleType,但没有任何效果。它不包裹顶部和底部。我怎样才能做到这一点? 我整夜都在努力工作

更新:

 public static float convertPixelsToDp(float px, Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float dp = px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
        return dp;
    }

4 个答案:

答案 0 :(得分:1)

好。所以,答案很简单。我们只需要根据图像的宽度和屏幕的宽度来改变ImageView的高度。这样做会在ImageView中正确设置图像:

private float getHeight(float height, float width) {
    Display display = ((Activity) context).getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return (height * size.x / width);
}

如果您的ImageView设置了一些边距或填充,请改用:

private float getHeight(float height, float width, int containerHeight) {
    return (height * containerHeight / width);
}

最后,

if (height != 0) {
        height = (int) getHeight(height, width);
        //or if has some margin or padding
        ViewGroup.LayoutParams params = viewHolder.listphoto.getLayoutParams();
        params.height = height;
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        viewHolder.listphoto.setLayoutParams(params);
}

或者是否有填充或边距:

if (height != 0) {
        height = (int) getHeight(height,  width, viewHolder.listphoto.getMeasuredWidth());
        ViewGroup.LayoutParams params = viewHolder.listphoto.getLayoutParams();
        params.height = height;
        params.width = ViewGroup.LayoutParams.MATCH_PARENT;
        viewHolder.listphoto.setLayoutParams(params);
}

注意:如果你选择第二个会更好。它将确保即使您对ImageView应用一些边距/填充,图像也会在ImageView中正确设置,忽略填充/边距。

答案 1 :(得分:0)

添加这些属性

android:adjustViewBounds="true"
android:cropToPadding="false"
android:scaleType="fitXY"

答案 2 :(得分:0)

android:scaleType="fitXY"
android:adjustViewBounds="true"

我认为这两个属性将解决问题,请删除

 android:scaleType="fitCenter"

将宽度更改为

 android:layout_width="wrap_content"

答案 3 :(得分:0)

&#13;
&#13;
owl-item
&#13;
&#13;
&#13;

这将为您提供而无需提供scaleType。