因为项目需要 , 做一个类似于知乎的, 图片展示 如下图:
第一想法就是 ,这还不简单嘛 。recyclerViews使用GridLayoutManager加上item分割线就OK了。
结果写完发现实际效果如下:
可以看到两张图 ,图一图二明显宽度不一样 。仔细思考了一下 因为现在的分割线实现逻辑是 最右侧 最下方不画分割线。
那么分割线实际占用的是第一张图的item宽度, 导致两个item宽度不等。
那可怎么办呢,不要慌问题不大 。解决的思路很简单 : 首先分析一下,当有2列的时候, 只有一个分割线。平分到2个item
中就是一人1/2。同理 n列时,每个item分割线应为(n-1)/n 。然后画图 :
一目了然,开始撸码。重写getItemOffsets()方法:
@Override public void getItemOffsets(Rect outRect, View child, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, child, parent, state); int pos = parent.getChildAdapterPosition(child); int column = (pos) % spanCount+1;// 计算这个child 处于第几列 outRect.top = dividerWidthTop; outRect.bottom = dividerWidthBot; //注意这里一定要先乘 后除 先除数因为小于1然后强转int后会为0 outRect.left = (column-1) * dividerWidth / spanCount; //左侧为(当前条目数-1)/总条目数*divider宽度 outRect.right = (spanCount-column)* dividerWidth / spanCount ;//右侧为(总条目数-当前条目数)/总条目数*divider宽度 }
ojbk 看看效果
再看看两个的
完全ojbk