如何在 Android 中加载 RecyclerView 背景中的所有图像
How to load all the images in the background of a RecyclerView in Android
您好,我正在处理一个有 1000 条记录的 Recycler 视图,我需要在其中显示远程图像。我一次加载 20 条记录。屏幕上一次可以显示 6 条记录(基于 android 设备的屏幕大小)。当行显示在屏幕上时,回收器视图正在向后端请求图像,这导致需要一些时间才能在屏幕上显示它(我正在使用 picasso 库进行延迟加载)。你能否建议我如何一次在后台缓存所有 20 张图像,这样我可以在用户向下滚动时立即向用户显示图像。 (这是我们的要求)
我认为这个 link 有你需要做的,但不完全是 20 条记录
首先你需要实现这个 LinearLayoutManager :
public class PreCachingLayoutManager extends LinearLayoutManager {
private static final int DEFAULT_EXTRA_LAYOUT_SPACE = 600;
private int extraLayoutSpace = -1;
private Context context;
public PreCachingLayoutManager(Context context) {
super(context);
this.context = context;
}
public PreCachingLayoutManager(Context context, int extraLayoutSpace) {
super(context);
this.context = context;
this.extraLayoutSpace = extraLayoutSpace;
}
public PreCachingLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
this.context = context;
}
public void setExtraLayoutSpace(int extraLayoutSpace) {
this.extraLayoutSpace = extraLayoutSpace;
}
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
if (extraLayoutSpace > 0) {
return extraLayoutSpace;
}
return DEFAULT_EXTRA_LAYOUT_SPACE;
}
}
然后将其设置为您回收视图的布局管理器。
PreCachingLayoutManager layoutManager = new
PreCachingLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
layoutManager.setExtraLayoutSpace(DeviceUtils.getScreenHeight(getActivity()));
recyclerView.setLayoutManager(layoutManager);
您好,我正在处理一个有 1000 条记录的 Recycler 视图,我需要在其中显示远程图像。我一次加载 20 条记录。屏幕上一次可以显示 6 条记录(基于 android 设备的屏幕大小)。当行显示在屏幕上时,回收器视图正在向后端请求图像,这导致需要一些时间才能在屏幕上显示它(我正在使用 picasso 库进行延迟加载)。你能否建议我如何一次在后台缓存所有 20 张图像,这样我可以在用户向下滚动时立即向用户显示图像。 (这是我们的要求)
我认为这个 link 有你需要做的,但不完全是 20 条记录
首先你需要实现这个 LinearLayoutManager :
public class PreCachingLayoutManager extends LinearLayoutManager {
private static final int DEFAULT_EXTRA_LAYOUT_SPACE = 600;
private int extraLayoutSpace = -1;
private Context context;
public PreCachingLayoutManager(Context context) {
super(context);
this.context = context;
}
public PreCachingLayoutManager(Context context, int extraLayoutSpace) {
super(context);
this.context = context;
this.extraLayoutSpace = extraLayoutSpace;
}
public PreCachingLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
this.context = context;
}
public void setExtraLayoutSpace(int extraLayoutSpace) {
this.extraLayoutSpace = extraLayoutSpace;
}
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
if (extraLayoutSpace > 0) {
return extraLayoutSpace;
}
return DEFAULT_EXTRA_LAYOUT_SPACE;
}
}
然后将其设置为您回收视图的布局管理器。
PreCachingLayoutManager layoutManager = new
PreCachingLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
layoutManager.setExtraLayoutSpace(DeviceUtils.getScreenHeight(getActivity()));
recyclerView.setLayoutManager(layoutManager);