【问题标题】:Android ImageView - Fill width and Resize to Maintain Aspect RatioAndroid ImageView - 填充宽度和调整大小以保持纵横比
【发布时间】:2014-06-09 15:43:22
【问题描述】:

我在ListView 中使用了一行View

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

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

  1. 水平拉伸图像,使其填充给定LinearLayout 的 40%
  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 有什么巧妙的技巧来完成工作?

【问题讨论】:

标签: java android resize imageview aspect-ratio


【解决方案1】:

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

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/myImage"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true" />

【讨论】:

    【解决方案2】:

    完全删除秤类型。另外,我认为您可能误解了setAdjustViewBounds 的作用。如果图像被缩放,ImageView 中的位图被缩放,而不是ImageView。将setAdjustViewBounds 设置为true 将确保ImageView 的边界始终与绘制的位图的边界相匹配。

    【讨论】:

    • 我已经尝试过了,但它并没有达到我想要的效果。我希望它可以缩放,以便它填满整个 40% 的行。删除 ScaleType 根本不会缩放图像,这不是我想要的。 setAdjustViewBounds 对我来说似乎是正确的,因为我希望视图的高度范围可以适当地放大或缩小?
    猜你喜欢
    • 2020-06-14
    • 2013-08-07
    • 2011-11-30
    • 1970-01-01
    • 2012-06-05
    • 2012-03-26
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多