如何重叠LinearLayoutManager中的项目 - RecyclerView(如堆叠卡)

时间:2014-12-24 07:50:47

标签: android listview android-recyclerview recycler-adapter


是否可以重叠RecyclerView中的项目?
我正在尝试使用LinearLayoutManager 我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。 (如堆叠卡)

  

我使用ListView看过some variant。所以,我认为它会   也可以在RecyclerView中使用。但经过一段时间的探索,   我觉得要花很多时间来实现自定义   布局经理和对此的相当程度的理解。(我看了   关于Dave关于Building Custom LayoutManager

的帖子

所以,现在我想我可能只需要根据我的要求使用ListView变体,而不是处理这种复杂的自定义布局管理器。

但是,我只需要让里面的物品重叠。我觉得可能还有其他方向我还没有意识到。如果除了ListView varient 和自定义布局管理器之外还有,请告诉我。

  

我也会在下面发表我的发现。

2 个答案:

答案 0 :(得分:31)

我假设您正在寻找部分重叠(例如,卡片略微散开)。如果是这样,使用RecyclerView和自定义ItemDecoration看起来相当简单。这是一个简单的例子,它将项目垂直重叠90px:

public class OverlapDecoration extends RecyclerView.ItemDecoration {

  private final static int vertOverlap = -90;

  @Override
  public void getItemOffsets (Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

    outRect.set(0, vertOverlap, 0, 0);

  }
}

此示例对偏移量进行硬编码,但如果列表项的高度不同,则您需要测量并添加逻辑。

在设置layoutmanager之前,将此装饰添加到RV。我已经尝试使用StaggeredGrid,但它也适用于LinearLayout和Grid LM。

答案 1 :(得分:0)

您可以使用ItemDecoration中的RecyclerView

设置ItemDecoration:

var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter

创建ItemDecoration类:

class MyItemDecoration : RecyclerView.ItemDecoration() {

    private val overlapValue = -60

    override fun getItemOffsets(outRect : Rect, view : View, parent : RecyclerView, state : RecyclerView.State) {
        outRect.set(0, 0, 0, overlapValue)  // args is : left,top,right,bottom
    }
}