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設計來計算。

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