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


———————————————
转载于:https://blog.csdn.net/hjw45611/article/details/77534182

RecyclerView中,可以使用addItemDecoration方法来添加分割线。这个方法可以接受一个RecyclerView.ItemDecoration对象作为参数。\[2\]通过添加ItemDecoration,可以影响每个item视图的测量和绘制。\[2\]在RecyclerView中,item装饰是有顺序的,先添加的装饰会先运行/查询/绘制,对item视图产生影响。\[1\]如果在列表中添加了padding,那么之后的item装饰会在之前的装饰给定的区域内进行绘制/填充。\[1\]要修改分割线的颜色和宽度,可以通过修改android:color和android:height来实现。最后,使用addItemDecoration方法将分割线添加到RecyclerView对象中。\[3\] #### 引用[.reference_title] - *1* *2* [RecyclerView addItemDecoration 的妙用 - item 间距平均分布和添加分割线](https://blog.csdn.net/gdutxiaoxu/article/details/89387478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [RecyclerView调用addItemDecoration添加自定义分割线](https://blog.csdn.net/hxltech/article/details/52117604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值