Наше приложение является имиджевым, ориентированным на моду приложением. Его главный экран содержит фид в стиле Instagram, который загружает URL-адреса изображений с сервера и загружает их с помощью Glide.
Поскольку мы используем RecyclerView, элемент перерисовывается каждый раз, когда он покидает экран. Проблема в том, что это вызывает скачки / задержки при каждой прокрутке пользователя вниз (или вверх), и RecyclerView необходимо перерисовать изображение (а затем вызвать adjustViewBounds
), чтобы ширина изображения «заполнила» ширину экрана, сохраняя при этом соотношение.
XML-код ImageView.
<ImageView
android:id="@+id/homeFeed_IV_lookImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
app:imageUrl="@{homeFeedItemViewModel.lookImage}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/static_image_1" />
Переплетный адаптер.
@BindingAdapter("imageUrl")
fun setImageUrl(imageView: ImageView, url: String?) {
if (!url.isNullOrEmpty()) {
imageView.displayImage(url)
}
}
Функция расширения.
fun ImageView.displayImage(url: String = "") {
Glide.with(context)
.load(url)
.apply(RequestOptions().placeholder(R.color.imagePlaceholder)
.diskCacheStrategy(DiskCacheStrategy.ALL))
.into(this)
}
Этот «лаг / джанк» дает неприятный опыт. Есть ли способ сделать изображение более гладким в RecyclerView?