美文网首页
GridLayoutManager一些细节

GridLayoutManager一些细节

作者: yin_xin | 来源:发表于2021-10-21 23:54 被阅读0次

    下面结论都是基于GridLayoutManager方向为竖直,spanCount为列数的情况,但在水平方向类似。

    SpanSizeLookup

    • public int getSpanIndex(int position, int spanCount)
      返回值:position对应item所在列的起始index

    • public abstract int getSpanSize(int position)
      返回值:position对应item所跨越列的数量(所占spanCount的份额)

    • public int getSpanGroupIndex(int adapterPosition, int spanCount)
      返回值:position对应item所属组的index, 如果是竖直方向就表示所在的行号

    假设一个grid为5列,有一个item在第二行,宽度从第二列开始到最后一列。
    那么那么这个item宽度占了4列,所以getSpanSize等于4。
    在第二行,所以getSpanGroupIndex等于1。
    宽度从第二列开始,所以getSpanIndex等于1。

    ItemDecoration

    在使用decoration做间距,getItemOffsets方法中使用Rect为每个item分配间距,如果每个item的左右间距之和不相等,则会导致最终每个item不是均分。

    假设左间距a,右间距b,每个item之间的间隔为c,对任意个数均分左右间距应该满足下面关系,记左间距为L0,L1,L2....Ln-1,右间距为R0,R1,R2....Rn-1,n为每行item个数。

    常数k= (a+b+(n-1)*c)/n
    第一个: L0 = a, R0= k-L0
    第二个:L1 = k-R0, R1 = k-L1
    ......
    第N个:L(n-1) = k - R(n-2), R(n-1) = b

    上面关系可以通过整理个算法计算

    相关文章

      网友评论

          本文标题:GridLayoutManager一些细节

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