项目有一个界面是这样的:
看到后第一眼觉得应该使用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