我在View
中使用了一行ListView
。
此RowView
由左侧的ImageView
和水平TextView
右侧的LinearLayout
组成,其中图片占据了40%的空间,留下剩余的60%。
我希望布局能够以下列方式处理ImageView
中图像的大小调整:
LinearLayout
ImageView
以保持原始宽高比这是我对布局的方法:
protected class RowView extends LinearLayout {
public ImageView iv = null;
public TextView tv = null;
private LinearLayout.LayoutParams ivlp = null;
private LinearLayout.LayoutParams tvlp = null;
public RowView(Context ct) {
super(ct);
setOrientation(LinearLayout.HORIZONTAL);
// Create the views
iv = new ImageView(ct);
ivlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.4f);
iv.setLayoutParams(ivlp);
iv.setAdjustViewBounds(true);
iv.setScaleType(ScaleType.FIT_XY);
tv = new TextView(ct);
tvlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.4f);
tv.setLayoutParams(tvlp);
tv.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);
// Add the views
addView(iv);
addView(tv);
}
}
我得到的结果是这样的:
据我所知:
MATCH_PARENT
正确地强制图像水平拉伸以填充40%的空间ImageView.setAdjustViewBounds(true)
应该允许调整ImageView
的大小,这是我想要的。问题是ImageView.ScaleType
似乎没有做我想要的事情ImageView.ScaleType(ScaleType.FIT_XY)
不是我想要的,因为它没有保持宽高比。但所有其他人,似乎没有伸展ImageView
的高度(这使得ImageView.setAdjustViewBounds(true)
几乎无用)。我做错了什么?这个简单的事情如此困难似乎是错的?
或者我是否真的必须努力扩展ImageView
和覆盖onMeasure
以强制调整大小和宽高比?
或者Matrix
有一个聪明的伎俩来完成工作吗?
答案 0 :(得分:3)
我相信这就是你要找的东西:
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myImage"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />
答案 1 :(得分:0)
完全删除比例类型。另外,我认为你可能误解了setAdjustViewBounds
的作用。如果缩放图像,则缩放ImageView
中的位图,但不缩放ImageView
。将setAdjustViewBounds
设置为true将确保ImageView
的边界始终与绘制的位图边界匹配。