【发布时间】:2016-07-28 18:20:29
【问题描述】:
我有从 url 填充的 ImageView。当图像进入时,我使用“centerInside”策略对其进行缩放,这很好,我使用“adjustViewBounds”调整 ImageView 边界。
在我下载图像之前,我不知道 ImageView 的可能大小。但是,我需要显示一个合理大小的占位符。所以我在“minHeight=150dp”中加入了彩色背景。
<ImageView
android:id="@+id/leadImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="150dp"
android:background="@color/color_primary"
android:adjustViewBounds="true"
android:scaleType="centerInside" />
现在,如果下载的图像小于 150 dp,则 ImageView 仍将占用 150 dp,这是我不希望的。
所以我尝试构建一个派生的 ImageView 类,如果 drawable 已经存在,则覆盖 minHeight,如下所示:
class SomeImageView extends ImageView {
protected int getSuggestedMinimumHeight() {
if (getDrawable() != null)
return 0;
return super.getSuggestedMinimumHeight();
}
}
我做了不同的变体,但似乎 getDrawable() 在 ImageVew 中确实存在时为空。如果不深入了解 ImageView 的内部机制,很难猜出它为什么会这样。
当 ImageView 上已设置 drawable 时,也许有人会建议另一种方法或解决方法,用 0 覆盖 minHeight。
【问题讨论】: