#android #imageview #android-glide
#Android #imageview #android-glide
Вопрос:
Я создаю простое приложение для Android с использованием Glide. Функция проста: приложение отправляет сетевой запрос и возвращает список URL-адресов изображений. Затем, используя Glide и RecyclerView, я хочу отобразить изображения.
Способ, которым я хочу отображать изображения, заключается в том, что они должны заполнять ширину экрана, а высота должна просто автоматически настраиваться для поддержания исходного соотношения сторон.
Вот макет держателя представления моего RecyclerView:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:scaleType="center"
android:layout_marginTop="12dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
И вот код моего держателя представления:
class PhotoViewHolder(private val binding: PhotoViewHolderBinding): RecyclerView.ViewHolder(binding.root) {
fun bind(imageUrl: String?) {
if (imageUrl != null) {
Glide.with(binding.imageView).load(imageUrl).into(binding.imageView)
}
}
}
Однако происходит то, что я ничего не вижу на своем экране. Используя инспектор компоновки, я обнаружил, что ImageViews есть, они имеют только 0 высоты и 0 ширины:
Интересно, почему это так.
Ответ №1:
Я обнаружил, что если я изменю код Glide на этот:
Glide.with(binding.root.context)
.asBitmap()
.load(imageUrl)
.into(object: CustomTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
binding.imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {}
})
Тогда это работает. Так что, по-видимому, он должен использовать CustomTarget
. Я до сих пор не понимаю, почему.