Как загрузить изображения с помощью Glide в моем приложении? - PullRequest
0 голосов
/ 10 июня 2018

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

1.- ДляНапример, у меня есть сетка с 6 строками и 2 столбцами, но до прокрутки видны только 3 строки. Glide загружает все изображения, даже если они не видны на экране?Или он загружает изображения до тех пор, пока изображение не станет видимым для пользователя?

2.- В случае загрузки всех изображений при запуске, как я могу заставить Glide загружать изображения только тогда, когда они видны пользователю?Потому что у меня есть json с 30 изображениями, но я не хочу, чтобы пользователь тратил много своих данных на загрузку изображений, если он не прокручивает для просмотра других изображений.

Я использую этот код длязагрузить каждое изображение сетки:

public void onBindViewHolder(MyViewHolder holder, int position) {
        GalleryPhotoObject image = images.get(position);

        if (!Strings.isNullOrEmpty(image.getImage())) {
            RequestOptions requestOptions = new RequestOptions();
            requestOptions.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);
            Glide.with(context).load(Constants.BASE_URL + image.getImage())
                    .error(Glide.with(context).load(Constants.BASE_URL + image.getImage()))
                    .thumbnail(0.5f)
                    .apply(requestOptions)
                    .into(holder.thumbnail);
        }
    }

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Glide загружает изображения точно, когда вы вызываете

 Glide.with(context).load(resource)

и берете ширину и высоту изображения, переданного в

.into(imageview)

для кэширования изображения с этой шириной и высотой в локальныйхранилище.

RecyclerViews, как его имя говорит, повторно использует или перерабатывает представления элементов.Таким образом, даже если вам не нужно загружать какие-либо изображения, вы должны вызывать

 Glide.with(context).clear(imageview) 

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

0 голосов
/ 10 июня 2018

В этом случае Glide не имеет никакого отношения к тому, сколько он должен загрузить.Это зависит от вашей реализации.То, как вы настроили загрузку Glide в onBindViewHolder, означает, что изображение будет загружаться каждый раз, когда привязывается новый View, иными словами, когда на экране появляется View.

Кроме того, Glide также имеет внутренний кеш, поэтому он не загружает изображения, которые уже находятся в кеше.

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

В вашем контексте давайте предположим, что у вас есть 3 видимые строки, тогда, вероятно, для этих 3 строк будет вызван onBindViewHolder ивозможно для 4-го и 5-го ряда, который является предполагаемым поведением.

tldr: Ваша реализация хороша сейчас, чтобы избежать дополнительной и неэффективной загрузки изображений

...