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

How to load image using glide in advance?

实际上,我正在尝试使用 glide 4.4.0 将图像加载到我的 reycycleview 中,并且加载正常。但现在的问题是我的 recyclerview 由于图像加载而快速滚动时有点滞后。但是我看到了一些名为 preloaddownloadOnly 的 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);
}