Дублируйте изображения при загрузке изображений из ресурсов Android в виде растрового изображения и настройке ImaegView с помощью glideV4 - PullRequest
0 голосов
/ 23 января 2019

Я попытался извлечь растровое изображение из ресурсов, а затем попытался загрузить горизонтальный список изображений в режиме повторного просмотра, используя glide как asBitmap().Я получаю дубликаты изображений и изображения несоответствия (загрузка неправильного изображения вместо требуемого изображения).На приведенном ниже снимке экрана показано, что для ноутбуков и мобильных телефонов загружено одинаковое растровое изображение и Для Footware and Bus загружен неправильный растровый рисунок Here laptop and Mobiles have same bitmap loaded and Footware and Bus has wrong bitmap loaded Это хорошо заработало после удаления кеша скольжения с помощью.skipMemoryCache(true).

Я хочу разрешить ту же проблему: использовать Glide Cache для загрузки изображений.

Пробовал следующие пункты, которые были предложены на этой странице: Glide recyclerview loading duplicateimage 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 Ответ

0 голосов
/ 23 января 2019

эта проблема иногда возникает в обзорах переработчиков Для просмотра своих элементов списка реселлер использует те же 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
}
...