Как оптимизировать RecyclerView для изображений с несколькими соотношениями ширины и высоты, чтобы избежать скачка / отставания / рывка? - PullRequest
3 голосов
/ 06 мая 2019

Наше приложение является имиджевым, ориентированным на моду приложением. Его главный экран содержит фид в стиле 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?

1 Ответ

0 голосов
/ 08 мая 2019

Возможно, вам удастся повысить производительность, используя ImageViews фиксированного размера. Если вы управляете бэкэндом и имеете возможность включать больше информации об изображениях, чем просто URL (так, чтобы вы включили ширину и высоту или соотношение сторон изображения в полезную нагрузку канала).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...