首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在我的应用程序中使用Glide加载图像?

如何在我的应用程序中使用Glide加载图像?
EN

Stack Overflow用户
提问于 2018-06-10 08:27:16
回答 2查看 565关注 0票数 1

我开始使用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);
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 10:19:26

Glide在调用

 Glide.with(context).load(resource)

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

.into(imageview)

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

RecyclerViews,顾名思义,就是重用或回收项目视图。因此,即使您不需要加载任何图像,您也应该调用

 Glide.with(context).clear(imageview) 

在绑定中,当不应加载任何图像时,旧项图像将停止显示在新项上。

票数 2
EN

Stack Overflow用户

发布于 2018-06-10 08:40:58

在这种情况下,Glide与它应该加载多少没有任何关系。这取决于您的实现。在onBindViewHolder中设置加载Glide的方式意味着每次绑定新的View时,或者换句话说,当View出现在屏幕上时,都会加载图像。

此外,Glide也有一个内部缓存,所以它不会加载缓存中已经存在的图像。

但需要注意的是,onBindViewHolder不仅针对当前显示在屏幕上的图像调用,还针对当前显示的图像上方或下方的图像调用。这是为了准备进入的滚动,这样用户就不会看到空的视图。

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档