Android RecyclerView 重叠项目(卡片堆)

问题描述 投票:0回答:3

如何在 RecyclerView 中重叠项目? 就像堆叠卡片一样。

提前致谢。

android android-recyclerview overlap
3个回答
17
投票

要重叠 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://stackoverflow.com/a/29067942/6255073


0
投票

您必须编写自己的 LayoutManager 或扩展 LinearLayoutManager


0
投票

opsenes 答案很有效!但我添加了百分比计算而不是固定值,以便它可以适用于多种设备和屏幕。

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
,所以如果你想实现Vertical,只需将
previousView.width
切换为
previousView.height
,将
outRect.left
切换为
outRect.top

您还可以设置重叠的百分比,其中 0 是不重叠,1 是完全重叠。

© www.soinside.com 2019 - 2024. All rights reserved.