Android Recyclerview 预加载视图
Android Recyclerview preload views
我想知道当用户滚动速度稍快时,如何避免回收视图中的视图出现小白'flashing'。
当然可以通过在可见屏幕之外预加载更多视图来避免闪烁
虽然这一定是一项很常见的任务,但我还没有找到任何可以做到的东西?
我从博客中尝试了这段代码:
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;
}
}
然后我在构造函数中使用 setLayoutManager()
将 LayoutManager 分配给我的自定义 Recyclerview
它是 "custom",但我只想在构造函数中设置 LayoutManager,这就是为什么我覆盖了 RecyclerView
不幸的是,这没有任何效果
RecyclerView 已经是一个非常高效的 API,通常如果您有帧丢失,您可以优化您的项目布局以使其更轻,并确保在回收视图时释放资源。真的不需要预加载任何东西。
这是一篇博客 post,它提供了一些关于如何做这些事情的想法
https://blog.workable.com/recyclerview-achieved-60-fps-workables-android-app-tips/
他们没有在此 post 中提及,但如果您的商品有图片,请确保这些图片不会太大。
要点是尽可能快地绘制视图,因为在滚动时会不断重绘所有内容。
我想知道当用户滚动速度稍快时,如何避免回收视图中的视图出现小白'flashing'。
当然可以通过在可见屏幕之外预加载更多视图来避免闪烁
虽然这一定是一项很常见的任务,但我还没有找到任何可以做到的东西?
我从博客中尝试了这段代码:
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;
}
}
然后我在构造函数中使用 setLayoutManager()
将 LayoutManager 分配给我的自定义 Recyclerview
它是 "custom",但我只想在构造函数中设置 LayoutManager,这就是为什么我覆盖了 RecyclerView
不幸的是,这没有任何效果
RecyclerView 已经是一个非常高效的 API,通常如果您有帧丢失,您可以优化您的项目布局以使其更轻,并确保在回收视图时释放资源。真的不需要预加载任何东西。
这是一篇博客 post,它提供了一些关于如何做这些事情的想法 https://blog.workable.com/recyclerview-achieved-60-fps-workables-android-app-tips/
他们没有在此 post 中提及,但如果您的商品有图片,请确保这些图片不会太大。
要点是尽可能快地绘制视图,因为在滚动时会不断重绘所有内容。