RecycleView StaggeredLayoutManager(瀑布流)滑动的时候,默认会出现item移动的问题,需以下来个步骤来解决:
附上StaggeredLayoutManager中的一段源码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /** 2 * Does not do anything to hide gaps. 3 */ 4 public static final int GAP_HANDLING_NONE = 0; 5 6 @Deprecated 7 public static final int GAP_HANDLING_LAZY = 1; 8 9 /** 10 * When scroll state is changed to {@link RecyclerView#SCROLL_STATE_IDLE}, StaggeredGrid will 11 * check if there are gaps in the because of full span items. If it finds, it will re-layout 12 * and move items to correct positions with animations. 13 * <p> 14 * For example, if LayoutManager ends up with the following layout due to adapter changes: 15 * <pre> 16 * AAA 17 * _BC 18 * DDD 19 * </pre> 20 * <p> 21 * It will animate to the following state: 22 * <pre> 23 * AAA 24 * BC_ 25 * DDD 26 * </pre> 27 */ 28 public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2;
1: 滑动中,不处理 gap:
mStaggeredLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
2: 给每个 item,设置大小:
viewHolder.cardView.setLayoutParams(layoutParams);