Recyclerview之瀑布流分割線左右間距均等問題

今天來記錄下瀑布流左右分割線均等設置!
在網上看了很多例子,都是什麼萬能分割線之類的,但是真正用到瀑布流的分割線卻會出現不一致的情況。
下面的例子只針對兩列的例子,三列四列也是用此方法搞,你們懂的 哈哈。
原因:
下面展示一下非瀑布流的item佈局情況:

這裏寫圖片描述

上面那種佈局相當於網格佈局,每個item的高度都是一樣的,所以
他的index就是左右左右,position所對應的itemView就是準確的,
左0,右1,左2,右3,以此類推…
這時候我們可以用下面代碼即可成功設置分割線。

   /**
         * 第一列設置左邊距爲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是根據列的高度哪個小而來加載下一個position在哪裏,
上面瀑布流圖我們可以看到,左0,右1 之後,2到右邊了,那是因爲
第二列的高度小於第一列的高度,所以就加載到第二列,以此類推,
下面的高度可以說就是隨機展示的,誰也不知道接下來要怎麼判斷分割線,
所以用上面的那些代碼是行不通的,

大招來了,我們可以通過StaggeredGridLayoutManager.LayoutParams
裏的getSpanIndex()來判斷,這個方法不管你高度怎樣,
他都是左右左右開始排列的,如下代碼。

   StaggeredGridLayoutManager.LayoutParams params =
    (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams();
        /**
         * 根據params.getSpanIndex()來判斷左右邊確定分割線
         * 第一列設置左邊距爲space,右邊距爲space/2  (第二列反之)
         */
        if (params.getSpanIndex() % 2 == 0) {
            outRect.left = space;
            outRect.right = space / 2;
        } else {
            outRect.left = space / 2;
            outRect.right = space;
        }

希望對各位小夥伴有所幫助!我順便貼出我的簡單小例子代碼:

https://github.com/pengAndroid/rv_staggeredgridlayout.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章