лучшая практика для извлечения Пикассо с совпадающим родителем в android - PullRequest
1 голос
/ 13 февраля 2020

Я использую Picasso для загрузки изображений и их показа в RecyclerView. Я пытаюсь предотвратить небольшую задержку, которая происходит, когда я прокручиваю RecyclerView, а Picasso загружает новые картинки, поэтому я использую fetch. Когда я использовал точный размер для изображений, это работало хорошо, но теперь я использую «match parent» (для работы на всех устройствах) в моем xml, и с тех пор есть задержка и когда я прокручиваю назад и вперед, он не запоминает картинки (задержка на картинках, которые уже были видны). Я попробовал просто fit () и centerCrop (), но это было медленно, так что это моя текущая попытка решения проблемы:

в адаптере (это выполняется только один раз). Я установил слушателя, чтобы получить точный размер ImageViews

private void preloadImage(final View picture) {
    ViewTreeObserver observer = picture.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            PictureUtil.fetchImage(picture.getHeight(), picture.getWidth());
            ViewTreeObserver mObserver = picture.getViewTreeObserver();
            mObserver.removeOnGlobalLayoutListener(this);
        }
    });
}

В PictureUtil я извлекаю все картинки:

   public static void fetchImage(int height, int width) {
    if (height > 0 && width > 0) {
        for (House house : Houses.houseList) {
            Picasso.get().load(getFrontPicturePath(house.id))
                    .resize(width, height)
                    .centerCrop()
                    .fetch();
        }
    }
}

и снова в адаптер, вот как я их загружаю:

Picasso.get()
            .load(PictureUtil.getFrontPicturePath(houseId))
            .error(PictureUtil.getPlaceholderPath(context))
            .fit()
            .centerCrop()
            .into(view);

и это изображение в xml:

        <ImageView
            android:id="@+id/house_row_picture"
            android:layout_width="match_parent"
            android:layout_height="170dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@drawable/img_small" />

Так что проблема снова в том, что у меня задержка на изображениях (не как когда у меня были фиксированные размеры) и когда я прокручиваю в Recyclerview изображения исчезают и загружаются снова. Что я делаю неправильно? Есть ли лучшая практика для этого?

Заранее спасибо

...