我正在使用glide 4.4.0
将图片加载到我的reycycleview
中,它加载得很好。但是现在问题是当我快速滚动时,由于图像加载,我的recyclerview
会有些卡顿。不过我看到一些glide的方法叫做preload
和downloadOnly
。那么,我的问题是这些方法是否有助于提前加载图像?如果有,如何使用它们?
我正在使用glide 4.4.0
将图片加载到我的reycycleview
中,它加载得很好。但是现在问题是当我快速滚动时,由于图像加载,我的recyclerview
会有些卡顿。不过我看到一些glide的方法叫做preload
和downloadOnly
。那么,我的问题是这些方法是否有助于提前加载图像?如果有,如何使用它们?
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);
}