Android 使用RecyclerView實現列表item重疊效果(使用addItemDecoration方法)

Android 使用RecyclerView實現列表item重疊效果(使用addItemDecoration方法),項目有一個界面是這樣的。
項目界面
看到後第一眼覺得應該使用RecyclerView,首先這個列表是item疊放效果,下面的壓住瞭上面的一部分,而且item背景圖片四周都有些透明陰影,不能簡簡單單的重定item高度解決,當然得需要很有私人訂制范的RecyclerView瞭,要不就去找找有用的API方法,要不就是自定義LayoutManager。

很高興,RecyclerView的一個方法能夠解決這種效果,就是addItemDecoration方法;
一般我們都這樣用

        mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                outRect.bottom = 10;
            }
        });

能夠使RecyclerView有一個10像素的透明分割線。
那如果這個值是負數呢?很幸運,這樣能達到我們想要的重疊效果:
失敗狀態
很明顯實現瞭我們想要的效果,但最後一個的item也被擋瞭,說明每一個item的下面都有一個分割線,因為outRect.bottom = 10為正值時也能看到:
為正值時
很明顯滾動到最後一條時,底部有一個透明分割線。
那如何讓RecyclerView的最後一個item不顯示呢?還是剛才的代碼,加一句判斷就行瞭:

        mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                super.getItemOffsets(outRect, view, parent, state);
                if (parent.getChildPosition(view) != (mlist.size() - 1)) {
                outRect.bottom = -100;
                }

            }
        });

parent.getChildPosition(view)能夠獲取item的View在parent中的索引,隻要它不是最後一個就添加分割線高度,雖然方法已過時,但仍然完美的解決瞭問題。
成功狀態

註:Demo是隨便寫的,負值的多少還是需要根據Ui設計來計算。

You May Also Like