recyclerview 加載item ,給特定的item設置上下左右的間距問題

不知道怎麼,自己最近的時間老是不想學習,又開始玩一起來了,又在莫名的幻想一起沒有用的東西。今天我把我忘記的東西下下來啊,以後在用的時候不用再去翻別人的博客自己博客有那不很好。

給指定的item設置間距,

首頁寫一個類

pubulic class RecyclerView  extends ReyclerView.ItemDecoration{

//定義局部變量
private int space;


//創建構造起
public RecyclerView(int space){
初始化變量
this.space=space;
}
重寫方法
getitemoffsets

@Override
    public void getItemOffsets(Rect outRect, View view,
                               RecyclerView parent, RecyclerView.State state) {
        outRect.left = space;
        outRect.right = space;
        outRect.bottom = space;

        // Add top margin only for the first item to avoid double space between items
        if (parent.getChildPosition(view) == 0)
            outRect.top = space;
    }


}

上面是寫的LinearLayoutManager

 

這裏是GridLayoutManager或者StaggeredGridLayoutManager 設置Item間距的辦法

 

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

   private int spanCount; //列數
   private int spacing; //間隔
   private boolean includeEdge; //是否包含邊緣

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
       
       //這裏是關鍵,需要根據你有幾列來判斷
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
            outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

            if (position < spanCount) { // top edge
                outRect.top = spacing;
            }
            outRect.bottom = spacing; // item bottom
        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}

調用

int spanCount = 3; // 3 columns int spacing = 50; // 50px boolean includeEdge = false;

mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));


 

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