如何使用Glide提前加载图片?

4

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


1
请看这个:https://dev59.com/2loT5IYBdhLWcg3w-DO6#38219830 - Hemant Parmar
@HemantParmar 感谢您的时间,先生。我会尝试使用它。 - anonymous
我遇到了这种问题,不是在列表中,而是预加载的一个。https://dev59.com/2loT5IYBdhLWcg3w-DO6 - An-droid
1个回答

2
你可以使用这个工具来优化你的预加载。它需要一些工作,但看起来很有前途。
简而言之,你需要创建一个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);
    }
}

然后你将它设置为RecyclerView的滚动监听器:
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);
}

非常感谢您的建议,先生。我会在实施后告诉您它的表现。 - anonymous
你知道是否有其他方式可以使用Recycler集成而不是LinearLayoutManager吗? - Granjero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接