【发布时间】:2014-06-09 15:43:22
【问题描述】:
我在ListView 中使用了一行View。
这个RowView 由左侧的ImageView 和右侧的TextView 和水平的LinearLayout 组成,其中图像占空间的40%,文本占剩余的60%。
我希望布局以以下方式处理 ImageView 中图像的大小调整:
- 水平拉伸图像,使其填充给定
LinearLayout的 40% - 垂直调整
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 有什么巧妙的技巧来完成工作?
【问题讨论】:
-
这个回复对我有用:stackoverflow.com/a/12283909/888245
-
检查接受的答案:stackoverflow.com/questions/18077325/… 它对我有用。
标签: java android resize imageview aspect-ratio