Android 如何在我的应用程序中使用Glide加载图像?
我开始使用Glide在android应用程序中加载图像,但我有一些关于它如何工作以及如何加载图像的问题,希望你能解释一下 1.-例如,我有一个6行2列的网格视图,但只有3行可见,直到滚动,Glide加载所有图像,即使它们在屏幕上不可见?或者它加载图像直到用户看到图像视图为止 2.-如果在启动时加载所有图像,我如何使滑动加载图像仅在用户可见时才加载?因为我有一个包含30个图像的json,但如果用户不滚动查看更多图像,我不希望用户花费大量数据来加载图像 我使用以下代码加载网格的每个图像:Android 如何在我的应用程序中使用Glide加载图像?,android,android-glide,Android,Android Glide,我开始使用Glide在android应用程序中加载图像,但我有一些关于它如何工作以及如何加载图像的问题,希望你能解释一下 1.-例如,我有一个6行2列的网格视图,但只有3行可见,直到滚动,Glide加载所有图像,即使它们在屏幕上不可见?或者它加载图像直到用户看到图像视图为止 2.-如果在启动时加载所有图像,我如何使滑动加载图像仅在用户可见时才加载?因为我有一个包含30个图像的json,但如果用户不滚动查看更多图像,我不希望用户花费大量数据来加载图像 我使用以下代码加载网格的每个图像: publi
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);
}
}
在这种情况下,Glide与它应该加载多少无关。这取决于您的实现。您在
onBindViewHolder
中设置加载滑动的方式意味着每次绑定新的视图
时,或者换句话说,当视图
出现在屏幕上时,都会加载图像
此外,Glide还有一个内部缓存,因此它不会加载缓存中已有的图像
但需要注意的是,onBindViewHolder
不仅用于当前屏幕上的图像,而且也用于当前显示图像正上方或下方的图像。这是为了准备进入的滚动,这样用户就不会看到空视图
在您的上下文中,假设您有3个可见行,那么可能会为这3行调用onBindViewHolder
,也可能为第4行和第5行调用,这是预期的行为
tldr:您的实现现在很好,可以避免额外和低效地加载图像。在这种情况下,Glide与应该加载多少图像无关。这取决于您的实现。您在
onBindViewHolder
中设置加载滑动的方式意味着每次绑定新的视图
时,或者换句话说,当视图
出现在屏幕上时,都会加载图像
此外,Glide还有一个内部缓存,因此它不会加载缓存中已有的图像
但需要注意的是,onBindViewHolder
不仅用于当前屏幕上的图像,而且也用于当前显示图像正上方或下方的图像。这是为了准备进入的滚动,这样用户就不会看到空视图
在您的上下文中,假设您有3个可见行,那么可能会为这3行调用onBindViewHolder
,也可能为第4行和第5行调用,这是预期的行为
tldr:您的实现现在很好,可以避免额外和低效地加载图像Glide在您调用时准确地加载图像
Glide.with(context).load(resource)
并获取传入图像的宽度和高度
.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中
RecyclerViews顾名思义,重用或回收项目视图。因此,即使您不需要加载任何图像,也应该调用
Glide.with(context).clear(imageview)
在您的绑定中,当不应加载任何图像时,旧项目图像将停止显示在新项目上。Glide将在您调用时准确加载图像
Glide.with(context).load(resource)
并获取传入图像的宽度和高度
.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中
RecyclerViews顾名思义,重用或回收项目视图。因此,即使您不需要加载任何图像,也应该调用
Glide.with(context).clear(imageview)
在您的绑定中,当不应加载图像时,旧项目图像将停止显示在新项目上。感谢您的简单解释,我将在代码上实现清除。感谢您的简单解释,我将在代码上实现清除。感谢您解释onBindViewHolder的工作原理,我不知道谢谢你解释onBindViewHolder是如何工作的,我不知道