如何在我的应用中使用Glide加载图片?

时间:2018-06-10 00:27:16

标签: android android-glide

我开始使用Glide在Android应用中加载图片,但我对它是如何工作以及如何加载图片有一些疑问,我希望你能解释一下。

1.-例如,我有一个包含6行和2列的网格视图,但只有3行可见,直到滚动,Glide加载所有图像,即使它们在屏幕上不可见?或者它将图像加载到图像直到ImageView对用户可见?

2.-如果在开始时加载所有图像,我怎样才能使Glide仅在用户可见时加载图像?因为我有一张带有30张图像的json,但是如果他不滚动查看更多图像,我不希望用户花费大量数据来加载图像。

我使用此代码加载网格的每个图片:

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 :(得分:3)

在这种情况下,Glide与它应加载的数量无关。它取决于您的实施。您在onBindViewHolder中设置加载Glide的方式意味着每次绑定新的View时都会加载图片,换句话说,当View出现在屏幕上时。

此外,Glide也有内部缓存,因此它不会加载已经在其缓存中的图像。

有一点需要注意的是,onBindViewHolder不仅仅是针对屏幕上当前显示的图像,而且还针对当前显示的图像正上方或下方的图像。这是为传入滚动做准备,因此用户不会看到空视图。

在您的上下文中,假设您有3个可见行,那么可能会为3行调用onBindViewHolder,可能是第4行和第5行,这是预期的行为。

tldr:您现在的实施很好,以避免额外和低效的图像加载

答案 1 :(得分:2)

Glide在您拨打电话时正好加载图片

 Glide.with(context).load(resource)

并获取传递的图像的宽度和高度

.into(imageview)

用于将具有该宽度和高度的图像缓存到本地存储中。

RecyclerViews,因为它的名称告诉,重复使用或回收项目视图。因此,即使您不需要加载任何图像,也应该调用

 Glide.with(context).clear(imageview) 

在绑定中,当没有图像应该加载时,旧项目图像停止显示在新项目上。