Предварительная нагрузка скольжения работает, только если указан размер

У меня есть приложение с длинным потоком изображений. Я хочу предварительно загрузить предстоящие изображения, чтобы пользователи видели меньшую (в идеале без) задержку, когда изображения появляются на экране.

Я пробовал разные варианты preload() и downloadOnly(), и единственная комбинация, которая, кажется, работает, - это использование для предварительной загрузки и загрузки одинаковых параметров размера.

Предварительная загрузка:

Glide.with(AbstractFeedFragment.this)                                               
    .load(picture.getUrl())
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .preload();

Предварительная загрузка () здесь такая же, как и при использовании предварительной загрузки (Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)

Загрузка фактического изображения в ImageView, когда оно появляется на экране:

requestManager
    .load(url)
    // Use the same dimensions used as when preloading.
    .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
    .placeholder(placeholderColor)
    .error(R.color.image_fallback_bg)
    .dontTransform()
    .into(imageView);

Если я удаляю методы override или dontTransform, изображение загружается во второй раз, когда оно появляется на экране (даже если я только что предварительно загрузил его).

Я делаю что-то неправильно? Насколько я понял, DiskCacheStrategy.ALL поместит исходное изображение в кеш, которое затем будет извлечено и изменено в размере при отображении в реальном времени.

Есть ли способ загрузить изображение без указания SIZE_ORIGINAL при его фактическом отображении? Если я правильно понимаю, это означает, что теперь я показываю изображение в полном размере, а не в правильном размере для моего ImageView.


person Simon Raes    schedule 10.07.2016    source источник


Ответы (1)


Используйте DiskCacheStrategy.SOURCE как для предварительной загрузки, так и для вашего запроса (для удаленных образов).

RESULT — это значение по умолчанию в Glide 3, которое требует, чтобы ваш запрос имел точно такое же преобразование, ширину и высоту, что и ваша предварительная загрузка.

Использование ALL в вашей предварительной загрузке, по сути, дважды кэширует одни и те же данные (поскольку преобразование не указано, и вы используете SIZE_ORIGINAL, что предотвратит субдискретизацию).

person Sam Judd    schedule 03.08.2016