Recyclerview ImageView мерцание на новых загруженных изображений - PullRequest
0 голосов
/ 05 марта 2020

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

Я загружаю некоторые изображения в RecyclerView, и когда я загружаю их либо с помощью Picasso, либо с Glide, у меня появляется то же самое. результат. Когда я прокручиваю RecyclerView, происходит мерцание.

Единственное решение, которое мне помогло, - это предварительно кэшировать изображения в другом потоке, дождаться его завершения и сохранить их в списке, и ТОГДА заполняйте представления в BindViewHolder

Thread glideThread = new Thread(() -> {

        for (int i = 0; i < imagesUrls.size(); i++) {
            Future<Bitmap> futureBitmap = Glide.with(context)
                    .asBitmap()
                    .load(entriesArrayList.get(i).getImageUrl())
                    .submit();
            try {
                imagesList.add(futureBitmap.get());
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    );
    glideThread.start();
    glideThread.join();
    if(!glideThread.isAlive())
    notifyDataSetChanged();

, а затем

for (Bitmap bitmap : imagesList) {
        holder.carouselImage.setImageBitmap(bitmap);
    }

в любом случае это плохая практика, потому что это может повредить поток пользовательского интерфейса et c.

Я попытался установить HasStableIds на моем адаптере и переопределил

@Override
public long getItemId(int position) {

    Log.d(TAG, "item id " + entriesArrayList.get(position).hashCode());
    return entriesArrayList.get(position).hashCode();
}

, и это реализация Glide

Glide.with(context).load(entriesArrayList.get(position).getImageUrl())
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .placeholder(R.drawable.ic_logo_background)
            .dontAnimate()
            .into(holder.carouselImage);

, и ничего не произошло. То же самое мерцание ImageView при загрузке нового растрового изображения.

...