我开始使用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);
}
}
发布于 2018-06-10 10:19:26
Glide在调用
Glide.with(context).load(resource)
并获取传入的图像的宽度和高度
.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中。
RecyclerViews,顾名思义,就是重用或回收项目视图。因此,即使您不需要加载任何图像,您也应该调用
Glide.with(context).clear(imageview)
在绑定中,当不应加载任何图像时,旧项图像将停止显示在新项上。
发布于 2018-06-10 08:40:58
在这种情况下,Glide与它应该加载多少没有任何关系。这取决于您的实现。在onBindViewHolder
中设置加载Glide的方式意味着每次绑定新的View
时,或者换句话说,当View
出现在屏幕上时,都会加载图像。
此外,Glide也有一个内部缓存,所以它不会加载缓存中已经存在的图像。
但需要注意的是,onBindViewHolder
不仅针对当前显示在屏幕上的图像调用,还针对当前显示的图像上方或下方的图像调用。这是为了准备进入的滚动,这样用户就不会看到空的视图。
在您的上下文中,假设您有3个可见的行,那么可能会为这3行调用onBindViewHolder
,并且可能为第4行和第5行调用,这是预期的行为。
tldr:您的实现现在很好,可以避免额外和低效的图像加载
https://stackoverflow.com/questions/50779624
复制相似问题