更改可见性后获得图像宽度

时间:2019-02-11 07:46:09

标签: android

我的约束布局里面有ImageView

<ImageView
        android:id="@+id/iv_lottery"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tv_lottery_info"
        tools:visibility="visible" />

在我的片段中,当我收到网络响应时,我显示ImageView并尝试通过Picasso从网络加载图像并使用自动高度调整其大小。

mIvLottery.setVisibility(View.VISIBLE);
Picasso.get().load(mLottery.getBanner()).resize(mIvLottery.getWidth(), 0).into(mIvLottery);

问题是:mIvLottery.getWidth()为0。

我该如何解决?

如果我将xml布局android:visibility from gone更改为invisiblevisible,则一切正常。问题仅在于ImageView的默认可见性为gone时。

1 个答案:

答案 0 :(得分:1)

因为将mIvLottery的可见性设置为GONE很好,所以宽度为0。

您在这里有几种解决方案,但是我不知道您的约束是什么,最快的方法是从mLottery.getBanner()中提取宽度。

否则,如果您需要计算屏幕上尚未显示的视图的宽度,则可以依靠measure() API。

因此,随后调用measure()getMeasuredWidth()应该可以为您提供所需的宽度。请记住,度量接受View.MeasureSpec作为参数,因此要取决于父布局选择哪个

mIvLottery.measure(UNSPECIFIED, AT_MOST);
int width = mIvLottery.getMeasuredWidth();