У меня есть ListView с текстом и большим изображением из Интернета. Элемент моего изображения имеет ширину подгонки и высоту wrap_content
.
Я попытался отобразить изображение в фоновом режиме с помощью UIL
и Picasso
. Оба они могут работать, но изображение всегда перезагружается, когда я прекращаю прокрутку, и это делает мерцание ListView
Это выглядит так:
Вы можете видеть, что перезагружает загруженные и кэшированные изображения, когда я прекращаю прокрутку (я прокручиваю вниз, а затем прокручиваю вверх).
Как я могу предотвратить это?
<ImageView android:id="@+id/imgFeed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"/>
// UIL
options = new DisplayImageOptions.Builder()
.showImageOnLoading(defaultImage)
.showImageOnFail(defaultImage)
.showImageForEmptyUri(defaultImage)
.resetViewBeforeLoading(false)
.cacheOnDisk(true).delayBeforeLoading(0)
.displayer(new FadeInBitmapDisplayer(200)).cacheInMemory(true).imageScaleType(ImageScaleType.EXACTLY_STRETCHED).build();
ImageAware imageAware = new ImageViewAware(viewHolder.imgFeed, false);
ImageLoader.getInstance().displayImage(item.getPhotoUrl(), imageAware, options);
// Picasso
Picasso.with(getContext())
.load(item.getPhotoUrl())
.placeholder(R.drawable.place_holder_big)
.resize(screenWidth, 0) //set max width
.into(viewHolder.imgFeed);
Для UIL я пробовал много способов в этой проблеме, но они вообще не работают для меня.
Обновление: похоже, я столкнулся с проблемой кэширования памяти, например . Но как я могу исправить эту проблему? Посмотрите на приложение Facebook, они сделали это очень хорошо. Все изображения имеют разные размеры с шириной посадки и очень гладкую прокрутку без перезагрузки изображений. Как они могут это сделать?