4

我有一排View正在使用的ListView.

RowView由水平方向ImageView的左侧和TextView右侧组成,LinearLayout其中图像占 40% 的空间,文本占剩余的 60%。

我希望布局以ImageView以下方式处理图像的大小调整:

  1. 水平拉伸图像,使其填充给定 40%LinearLayout
  2. 垂直调整大小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来完成工作?

4

2 回答 2

3

我相信这就是您正在寻找的:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/myImage"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true" />
于 2014-06-09T07:43:22.963 回答
0

完全移除刻度类型。另外,我想你可能误解了什么setAdjustViewBounds。如果图像被缩放,则 中的位图ImageView被缩放,而不是ImageView. 设置setAdjustViewBounds为 true 将确保ImageView' 的边界将始终与绘制的位图的边界相匹配。

于 2013-01-03T05:05:40.780 回答