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设计来计算。

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