Recyclerview - 重叠项目从下到上

时间:2016-11-18 12:21:35

标签: java android android-recyclerview

我为这样的项目设置了负余量: -

ItemDecoration.java

public class ItemDecorator extends RecyclerView.ItemDecoration {
    private final int mSpace;

    public ItemDecorator(int space) {
        this.mSpace = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view);
        if (position != 0)
            outRect.top = mSpace;
    }
}

MainActivity.java

recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new ItemDecorator(-80));

这会导致顶部项目在最重要项目重叠之后堆叠最低项目和下一项目。我希望顶级项目与下一个项目重叠,依此类推。

当前视图

enter image description here

必读视图

enter image description here

3 个答案:

答案 0 :(得分:11)

尝试这种方式并反向渲染您的回收者视图。

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);
        recyclerView.setLayoutManager(layoutManager);

以下是工作示例GitHub Link

答案 1 :(得分:3)

从2020年开始,将提供新的界面ChildDrawingOrderCallback。它定义了回收者视图中绘图元素的顺序。可以这样使用:

class BackwardsDrawingOrderCallback : RecyclerView.ChildDrawingOrderCallback {
    override fun onGetChildDrawingOrder(childCount: Int, i: Int) = childCount - i - 1
}

然后

recyclerView.setChildDrawingOrderCallback(BackwardsDrawingOrderCallback())

因此不再需要设置反向顺序和结束堆栈。

答案 2 :(得分:0)

尝试重写此方法。

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}