我想知道当用户滚动得更快时,我怎么能避免回收者视图中的小白色“闪烁”.
当然可以通过在可见屏幕之外预加载更多视图来避免闪烁
我找不到任何可以做到的事情,虽然这一定是一个非常常见的任务?
我在博客上试过这段代码:
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
它是“自定义”,但我只想在构造函数中设置LayoutManager,这就是为什么我覆盖了RecyclerView
不幸的是,这没有任何影响
解决方法:
RecyclerView已经是一个非常有效的API,通常如果您有帧丢失,您可以优化您的项目布局更轻,并确保您在回收视图时释放资源.实际上没有必要预加载任何东西.
这是一篇博客文章,提供了如何做这些事情的一些想法
https://blog.workable.com/recyclerview-achieved-60-fps-workables-android-app-tips/
他们在这篇文章中没有提到它,但如果你的项目有图像,请确保这些图像不是太大.
重点是尽可能快地绘制您的视图,因为滚动时不断重绘所有内容.