如何在RecyclerView中重叠项目?就像堆叠卡片一样。提前感谢。
为了重叠recyclerView行,您可以使用以下方法。
将此类添加到您的活动中。您可以自定义vertOverlap。
public class OverlapDecoration extends RecyclerView.ItemDecoration {
private final static int vertOverlap = -40;
@Override
public void getItemOffsets (Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
final int itemPosition = parent.getChildAdapterPosition(view);
if (itemPosition == 0) {
return; }
outRect.set(0, vertOverlap, 0, 0);
}
} `
在设置RecyclerView的布局管理器之前,添加您的装饰,然后我们就完成了。
mRecyclerView.addItemDecoration(new OverlapDecoration());
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
感谢 @MojoTosh https://dev59.com/X14c5IYBdhLWcg3wssFs#29067942
if (itemPosition == 0
,因为如果在recyclerview中有填充/边距,则它是无用的。 - Neuronopsenes的答案非常好!但是我添加了一个百分比计算,而不是固定值,这样它就可以适用于多个设备和屏幕。
class ItemDecorator() : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view)
if (position != 0) {
val widthOverlapPercentage = 0.25
val previousView = parent[position - 1]
val overlapWidth = previousView.width * widthOverlapPercentage
outRect.left = overlapWidth.toInt() * -1
}
}
}
我的解决方案基于一个横向RecyclerView
,所以如果你想要实现纵向,只需将previousView.width
与previousView.height
交换,并将outRect.left
与outRect.top
交换。
您还可以设置重叠百分比,其中0表示没有重叠,1表示完全重叠。