实际上,我正在尝试使用reycycleview
将图片加载到glide 4.4.0
中,并且加载正常。但现在问题是我的recyclerview
由于图像加载而快速滚动时有点滞后。但是我看到了一些名为preload
和downloadOnly
的滑行方法。所以,我的问题是这些方法是否有助于提前加载图像,如果是这样,那么如何使用它们?
答案 0 :(得分:2)
您可以使用this微调预加载。它需要相当多的工作,但看起来很有希望。
简而言之,您需要创建一个PreLoader类,它将从您的数据集中获取图像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);
}