如何使用glide提前加载图片?
How to load image using glide in advance?
实际上,我正在尝试使用 glide 4.4.0
将图像加载到我的 reycycleview
中,并且加载正常。但现在的问题是我的 recyclerview
由于图像加载而快速滚动时有点滞后。但是我看到了一些名为 preload
和 downloadOnly
的 glide 方法。所以,我的问题是 这些方法是否有助于提前加载图像,如果有,那么如何使用它们?
您可以使用 this 来 fine-tune 您的预加载。它需要相当多的工作,但看起来很有希望。
简而言之,您需要创建一个 PreLoader class,它将从您的数据集中获取图像 URL:
private class MyPreloadModelProvider implements PreloadModelProvider {
@Override
@NonNull
public List<U> getPreloadItems(int position) {
String url = myUrls.get(position);
if (TextUtils.isEmpty(url)) {
return Collections.emptyList();
}
return Collections.singletonList(url);
}
@Override
@Nullable
public RequestBuilder getPreloadRequestBuilder(String url) {
return
GlideApp.with(fragment)
.load(url)
.override(imageWidthPixels, imageHeightPixels);
}
}
然后将其设置为回收站视图上的滚动侦听器:
PreloadSizeProvider sizeProvider =
new FixedPreloadSizeProvider(imageWidthPixels, imageHeightPixels);
PreloadModelProvider modelProvider = new MyPreloadModelProvider();
RecyclerViewPreloader<Photo> preloader =
new RecyclerViewPreloader<>(
Glide.with(this), modelProvider, sizeProvider, 10 /*maxPreload*/);
RecyclerView myRecyclerView = (RecyclerView) result.findViewById(R.id.recycler_view);
myRecyclerView.addOnScrollListener(preloader);
在此之后,您将在适配器中的 onBondViewHolder 回调之前预加载您的图像,并且您将能够从缓存中显示它们。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
ImageView imageView = ((MyViewHolder) viewHolder).imageView;
String currentUrl = myUrls.get(position);
GlideApp.with(fragment)
.load(currentUrl)
.override(imageWidthPixels, imageHeightPixels)
.into(imageView);
}
实际上,我正在尝试使用 glide 4.4.0
将图像加载到我的 reycycleview
中,并且加载正常。但现在的问题是我的 recyclerview
由于图像加载而快速滚动时有点滞后。但是我看到了一些名为 preload
和 downloadOnly
的 glide 方法。所以,我的问题是 这些方法是否有助于提前加载图像,如果有,那么如何使用它们?
您可以使用 this 来 fine-tune 您的预加载。它需要相当多的工作,但看起来很有希望。
简而言之,您需要创建一个 PreLoader class,它将从您的数据集中获取图像 URL:
private class MyPreloadModelProvider implements PreloadModelProvider {
@Override
@NonNull
public List<U> getPreloadItems(int position) {
String url = myUrls.get(position);
if (TextUtils.isEmpty(url)) {
return Collections.emptyList();
}
return Collections.singletonList(url);
}
@Override
@Nullable
public RequestBuilder getPreloadRequestBuilder(String url) {
return
GlideApp.with(fragment)
.load(url)
.override(imageWidthPixels, imageHeightPixels);
}
}
然后将其设置为回收站视图上的滚动侦听器:
PreloadSizeProvider sizeProvider =
new FixedPreloadSizeProvider(imageWidthPixels, imageHeightPixels);
PreloadModelProvider modelProvider = new MyPreloadModelProvider();
RecyclerViewPreloader<Photo> preloader =
new RecyclerViewPreloader<>(
Glide.with(this), modelProvider, sizeProvider, 10 /*maxPreload*/);
RecyclerView myRecyclerView = (RecyclerView) result.findViewById(R.id.recycler_view);
myRecyclerView.addOnScrollListener(preloader);
在此之后,您将在适配器中的 onBondViewHolder 回调之前预加载您的图像,并且您将能够从缓存中显示它们。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
ImageView imageView = ((MyViewHolder) viewHolder).imageView;
String currentUrl = myUrls.get(position);
GlideApp.with(fragment)
.load(currentUrl)
.override(imageWidthPixels, imageHeightPixels)
.into(imageView);
}