美文网首页
Android RecycleView瀑布流的间隔问题

Android RecycleView瀑布流的间隔问题

作者: 一叶书生 | 来源:发表于2019-09-27 15:02 被阅读0次

    RecycleView瀑布流的间隔问题


    //设置recycleview瀑布流方式

    recycleview.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));

    //设置瀑布流间隔

    recycleview.addItemDecoration(new StaggeredDividerItemDecoration(mActivity, (int) getResources().getDimension(R.dimen.dp_9)));

    //就是这个间隔,瀑布流的间隔其他方式的间隔不一样,比较风骚,下面这段借鉴(我啊翔1314的内容。


    如图所示


    如图所示

    下一个item的位置取决于上一个item的那个更短一点,就放那个下面,如上图所示。

    这是因为瀑布流的item不是根据下标的顺序去排列,而是根据上方的两个item的高度差确定位置。上方哪个item预留的空间比较高,就会排列到这个item的下方。

    解决办法:

    自定义ItemDecoration extends RecyclerView.ItemDecoration

    代码示例:

    public class StaggeredDividerItemDecorationextends RecyclerView.ItemDecoration {

    private Contextcontext;

        private int space;

        public StaggeredDividerItemDecoration(Context context, int space) {

    this.context = context;

            this.space = space;

        }

    @Override

        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {

    StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();

            // 特别注意此处,获取item在span中的下标,不能用intposition=parent.getChildAdapterPosition(view);这样拿到的可能是正确顺序的下标,因为如上图所示,顺序不规律,设置居左居右边距就可能紊乱。

            int spanIndex = params.getSpanIndex();//这才是真正的视图可见的第几个顺序的下标,不过不是列表对应的索引,只是视觉位置索引。

            // 下面是中间间隔设置,

            if (spanIndex %2 ==0) {

    outRect.left =0;

            }else {

    // item为奇数位,设置其左间隔为5dp

                outRect.left =space;

            }

    // 下方间隔

            outRect.bottom =space;

        }

    }

    相关文章

      网友评论

          本文标题:Android RecycleView瀑布流的间隔问题

          本文链接:https://www.haomeiwen.com/subject/vrcgyctx.html