我目前有一个包含帖子的RecyclerView(类似于Facebook帖子或推文等),带有可选图片。在我的适配器的onBindViewHolder
方法中,我使用Picasso加载图像,但在加载之前我不知道图像的大小。我希望帖子看起来正常(没有图像),直到图像加载,然后图像应该出现,行高应该增加,以适应新图像的原始宽高比。
在加载图像的那一刻,它仍然附着在行的底部,同时覆盖行的上半部分,即使从ImageView的顶部有一个约束到主体底部TextView。
我的项目使用ConstraintLayout作为根,ImageView定义为:
<ImageView
android:id="@+id/imageViewMain"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/textViewBody"
app:layout_constraintStart_toStartOf="@+id/textViewBody"
app:layout_constraintTop_toBottomOf="@+id/textViewBody" />
我的onBindViewHolder
方法类似于此(我使用Kotlin):
override fun onBindViewHolder(holder: HomeAdapter.ViewHolder, position: Int) {
val item = items[position]
val mainImage = item.imageUrl
if (!mainImage.isNullOrEmpty()) {
Picasso.get().load(mainImage).into(holder.imageViewMain, object: Callback{
override fun onSuccess() {
// Could I do something here?
}
override fun onError(e: Exception?) { }
})
}
}
有没有人知道如何在图像加载时增加行高,而不是让图像覆盖行的其余部分?
答案 0 :(得分:0)
试试这个
//set visibility gone
//set height 250dp
// set scale_type = fitXY
<ImageView
android:id="@+id/imageViewMain"
android:layout_width="0dp"
android:layout_height="250dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:visibility="Gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/textViewBody"
app:layout_constraintStart_toStartOf="@+id/textViewBody"
app:layout_constraintTop_toBottomOf="@+id/textViewBody" />
在你的功能中
// set visibility Visible in onSuccess callback.
override fun onBindViewHolder(holder: HomeAdapter.ViewHolder, position: Int) {
val item = items[position]
val mainImage = item.imageUrl
if (!mainImage.isNullOrEmpty()) {
Picasso.get().load(mainImage).into(holder.imageViewMain, object: Callback{
override fun onSuccess() {
// Could I do something here?
holder.imageViewMain.setVisibility(View.Visible)
}
override fun onError(e: Exception?) { }
})
}
}