android Recyclerview -从下到上重叠项目

6mzjoqzu  于 2023-01-11  发布在  Android
关注(0)|答案(5)|浏览(283)

我为以下项目设置了负保证金:-

    • 项目装饰. 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;
    }
}
    • 主要活动. java**
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new ItemDecorator(-80));

这将导致顶部项堆叠在最低层,顶部项与下一项重叠。我希望顶部项与下一项重叠,以此类推。

    • 当前视图**

    • 必需视图**

cgvd09ve

cgvd09ve1#

尝试此方法,并以相反方向渲染回收器视图。

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

下面是工作示例GitHub Link

ou6hu8tu

ou6hu8tu2#

自2020年起,新增了ChildDrawingOrderCallback接口,定义了回收器视图中绘图元素的顺序,可按如下方式使用:

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

然后

recyclerView.setChildDrawingOrderCallback(BackwardsDrawingOrderCallback())

因此,不再需要设置逆序或从末尾堆叠。

x8diyxa7

x8diyxa73#

可以使用以下命令创建重叠的Ite Decorator:检查此link

class OverlappingItemDecoration : RecyclerView.ItemDecoration() {
    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        if (parent.getChildAdapterPosition(view) != RecyclerView.NO_POSITION) {
            outRect.set(0, 0, 0, - 60)
        }
    }
}
ghhaqwfi

ghhaqwfi4#

实现重叠的最简单方法是在回收器视图项中使用带负值的边距,如下所示:
image_item.xml

<com.google.android.material.imageview.ShapeableImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/authorIV"
    android:layout_width="35dp"
    android:layout_height="35dp"
    android:layout_marginStart="-8dp"
    android:scaleType="centerCrop"
    android:src="@drawable/ic_default_avatar"
    app:roundPercent="50" />
uttx8gqw

uttx8gqw5#

尝试重写此方法。

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

相关问题