如何在我的应用程序中使用 Glide 加载图像?
How load images using Glide in my app?
我开始使用 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);
}
}
在这种情况下,Glide 与它应该加载多少没有任何关系。这取决于您的实施。您在 onBindViewHolder
中设置加载 Glide 的方式意味着每次绑定新的 View
或换句话说,当 View
出现在屏幕上时都会加载图像。
此外,Glide 也有一个内部缓存,因此它不会加载已经在其缓存中的图像。
需要注意的一件事是,onBindViewHolder
不仅适用于当前屏幕上的图像,还适用于当前显示图像正上方或正下方的图像。那是为传入的滚动做准备,这样用户就不会看到空视图。
在您的上下文中,假设您有 3 个可见行,那么可能会为 3 行调用 onBindViewHolder
,并且可能为第 4 行和第 5 行调用,这是预期的行为。
tldr:您的实施现在很好,可以避免额外和低效的图像加载
Glide 在您调用时准确加载图像
Glide.with(context).load(resource)
并取传入的图片的宽高
.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中。
RecyclerViews 顾名思义,重复使用或回收项目视图。因此,即使您不需要加载任何图像,您也应该调用
Glide.with(context).clear(imageview)
在您的绑定中,当 none 应该加载图像时,旧项目图像将停止显示在新项目上。
我开始使用 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);
}
}
在这种情况下,Glide 与它应该加载多少没有任何关系。这取决于您的实施。您在 onBindViewHolder
中设置加载 Glide 的方式意味着每次绑定新的 View
或换句话说,当 View
出现在屏幕上时都会加载图像。
此外,Glide 也有一个内部缓存,因此它不会加载已经在其缓存中的图像。
需要注意的一件事是,onBindViewHolder
不仅适用于当前屏幕上的图像,还适用于当前显示图像正上方或正下方的图像。那是为传入的滚动做准备,这样用户就不会看到空视图。
在您的上下文中,假设您有 3 个可见行,那么可能会为 3 行调用 onBindViewHolder
,并且可能为第 4 行和第 5 行调用,这是预期的行为。
tldr:您的实施现在很好,可以避免额外和低效的图像加载
Glide 在您调用时准确加载图像
Glide.with(context).load(resource)
并取传入的图片的宽高
.into(imageview)
用于将具有该宽度和高度的图像缓存到本地存储中。
RecyclerViews 顾名思义,重复使用或回收项目视图。因此,即使您不需要加载任何图像,您也应该调用
Glide.with(context).clear(imageview)
在您的绑定中,当 none 应该加载图像时,旧项目图像将停止显示在新项目上。