瀑布流左右分割線均等設(shè)置岗宣!?
在網(wǎng)上看了很多例子热某,都是什么萬能分割線之類的,但是真正用到瀑布流的分割線卻會出現(xiàn)不一致的情況园细。
原因:?
下面展示一下非瀑布流的item布局情況:
上面那種布局相當(dāng)于網(wǎng)格布局惦积,每個(gè)item的高度都是一樣的,所以?
他的index就是左右左右猛频,position所對應(yīng)的itemView就是準(zhǔn)確的狮崩,?
左0,右1鹿寻,左2睦柴,右3,以此類推…?
這時(shí)候我們可以用下面代碼即可成功設(shè)置分割線毡熏。
? /**
? ? ? ? * 第一列設(shè)置左邊距為space坦敌,右邊距為space/2? (第二列反之)
? ? ? ? */
? ? ? ? if (parent.getChildLayoutPosition(view) % 2 == 0) {
? ? ? ? ? ? outRect.left = space;
? ? ? ? ? ? outRect.right = space / 2;
? ? ? ? } else {
? ? ? ? ? ? outRect.left = space / 2;
? ? ? ? ? ? outRect.right = space;
? ? ? ? }
重要的來了,如果是瀑布流痢法,如下圖:
瀑布流的position是根據(jù)列的高度哪個(gè)小而來加載下一個(gè)position在哪里狱窘,?
上面瀑布流圖我們可以看到,左0财搁,右1 之后蘸炸,2到右邊了,那是因?yàn)?
第二列的高度小于第一列的高度妇拯,所以就加載到第二列幻馁,以此類推,?
下面的高度可以說就是隨機(jī)展示的越锈,誰也不知道接下來要怎么判斷分割線仗嗦,?
所以用上面的那些代碼是行不通的,
大招來了甘凭,我們可以通過StaggeredGridLayoutManager.LayoutParams?
里的getSpanIndex()來判斷稀拐,這個(gè)方法不管你高度怎樣,?
他都是左右左右開始排列的丹弱,如下代碼德撬。
? StaggeredGridLayoutManager.LayoutParams params =
? ? (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
? ? ? ? /**
? ? ? ? * 根據(jù)params.getSpanIndex()來判斷左右邊確定分割線
? ? ? ? * 第一列設(shè)置左邊距為space铲咨,右邊距為space/2? (第二列反之)
? ? ? ? */
? ? ? ? if (params.getSpanIndex() % 2 == 0) {
? ? ? ? ? ? outRect.left = space;
? ? ? ? ? ? outRect.right = space / 2;
? ? ? ? } else {
? ? ? ? ? ? outRect.left = space / 2;
? ? ? ? ? ? outRect.right = space;
? ? ? ? }
希望對各位小伙伴有所幫助!我順便貼出我的簡單小例子代碼: