我使用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;
}
答案 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)
owl-item
&#13;
这将为您提供而无需提供scaleType。