Дублируйте изображения при загрузке изображений из ресурсов Android в виде растрового изображения и настройке ImaegView с помощью glideV4
Я попытался извлечь растровое изображение из ресурсов, а затем попытаться загрузить горизонтальный список изображений в режиме повторного просмотра, используя скольжение как asBitmap()
, Я получаю дубликаты изображений и изображения несоответствия (загрузка неправильного изображения вместо требуемого изображения). На приведенном ниже снимке экрана показан ноутбук и мобильные телефоны с одинаковой загрузкой, а Footware и Bus с неправильной загрузкой Это работало хорошо после того, как я удалил кеш скольжения .skipMemoryCache(true)
,
Я хочу разрешить то же самое, использовать скользящий кэш для загрузки изображений.
Попробовал следующие пункты, которые были предложены на этой странице: Glide recyclerview loading duplicate image 1) Я добавил держателя поля.
2) очистка растрового изображения -> Glide.with(context).clear(holder.imgcat)
; или используя holder.imgcat.setImageBitmap(null)
;
3) skipMemoryCache(true)
работал хорошо, но требуется кэш для загрузки изображений.
InputStream selectedInputStream = Application.get().getAssets().open(ImageSaver.selectedAssets + "/" + mValues.get(position).getImage_url());
Drawable selectedImagesDrawable = Drawable.createFromStream(selectedInputStream, null);
Bitmap selectedicon = ((BitmapDrawable) selectedImagesDrawable).getBitmap();
if(selectedInputStream != null) {
try {
selectedInputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
GlideApp.with(context)
.asBitmap()
.load(selectedicon)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.error(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.into(holder.imgcat);
Я получаю дубликаты изображений и изображения несоответствия (загрузка неправильного изображения вместо требуемого изображения) во время установки .diskCacheStrategy(DiskCacheStrategy.RESOURCE
) или же .diskCacheStrategy(DiskCacheStrategy.ALL)
,
skipMemoryCache(true)
работал хорошо, но требуется кэш для загрузки изображений
1 ответ
Эта проблема иногда возникает в обзорах переработчиков. Представления переработчиков используют одни и те же ViewHolders для отображения элементов списка. таким образом, есть вероятность, что к одному ImageView ваших виджетов одновременно вызывается более одного запроса. Исправить это можно было бы, чтобы остановить любые другие запросы Glide, уже происходящие для этого ImageView.
//in your onBindViewHolder
fun onBindViewHolder( holder:ViewHolder ,position:Int){
//call this to clear previous requests
Glide.with(context).clear(holder.imageView)
//then make new request
Glide.with(context).load(items[position].url).into(holder.imageview)
//other codes
}