动态覆盖ImageView minHeight

问题描述:

我有从URL填充的ImageView。当图像进入时,我使用“centerInside”策略对其进行缩放,这很好,我使用“adjustViewBounds”将ImageView绑定到它。动态覆盖ImageView minHeight

在我下载图像之前,我不知道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的仍然会占据150dp,我不想要的。

因此,我曾尝试是建立一个派生的ImageView类,覆盖了minHeight如果绘制的是已经存在,就像这样:

class SomeImageView extends ImageView { 
    protected int getSuggestedMinimumHeight() { 
     if (getDrawable() != null) 
      return 0; 
     return super.getSuggestedMinimumHeight(); 
    } 
} 

我做到了,在不同的变化,但似乎getDrawable()是在ImageVew中确实存在时为null。没有潜入ImageView的内部机制,很难猜测它为什么如此。

也许有人会建议另一种方法或解决方法,以便在ImageView上设置drawable时将minHeight替换为0。

一旦您知道实际的图像尺寸,您应该能够在代码中以编程方式更改minHeight属性。 ImageView继承View类的方法setMinimumHeight(int)

Android Docs - View