我的约束布局里面有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
更改为invisible
或visible
,则一切正常。问题仅在于ImageView
的默认可见性为gone
时。
答案 0 :(得分:1)
因为将mIvLottery
的可见性设置为GONE
很好,所以宽度为0。
您在这里有几种解决方案,但是我不知道您的约束是什么,最快的方法是从mLottery.getBanner()
中提取宽度。
否则,如果您需要计算屏幕上尚未显示的视图的宽度,则可以依靠measure()
API。
因此,随后调用measure()
和getMeasuredWidth()
应该可以为您提供所需的宽度。请记住,度量接受View.MeasureSpec作为参数,因此要取决于父布局选择哪个
mIvLottery.measure(UNSPECIFIED, AT_MOST);
int width = mIvLottery.getMeasuredWidth();