Итак, я использовал эту замечательную библиотеку Glide для показа собственных изображений в моем приложении галереи. Я использую ViewPager
с FragmentStatePagerAdapter
для отображения полноразмерных изображений. Предел выключения экрана пейджера составляет 1
(по умолчанию для экономии памяти). Я использую этот код для загрузки изображений в ViewPager
своего фрагмента:
Glide.with(getActivity())
.loadFromMediaStore(uri)
.asBitmap()
.signature(new MediaStoreSignature(mimeType, dateModified,
.into(mImageView);
Теперь я столкнулся с некоторыми проблемами, например:
- Загрузка изображений занимает некоторое время (если они не кешированы). Итак, пока пользователь прокручивает окно просмотра, отображается пустой экран во время загрузки изображения, чего я хочу избежать. Как я могу это сделать? Может быть, путем предварительного кеширования изображений?
- Иногда при прокрутке изображений большого размера (в основном фотографий с камеры) возникает исключение OOM, и пользователь остается с пустым экраном, поскольку изображение не загружено. Это также происходит, когда я переключаюсь из портретного режима в альбомный. Итак, я попытался использовать такие методы, как
atMost()
, которые дополнительно ухудшают качество изображения, поскольку изображения уже загружены вRGB_565
иapproximate()
, что также вызывает OOM. Как добиться максимального качества изображения без исключений OOM?
Что касается второй проблемы, я думал загружать изображения худшего качества для элементов вне экрана, а затем повышать качество, когда они появляются на экране. Является ли это возможным?
Я также пробовал использовать ARGB_8888
, но результат был таким же: исключение OOM.