是否可以重叠RecyclerView中的项目?
我正在尝试使用LinearLayoutManager
我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。 (如堆叠卡)
我使用ListView看过some variant。所以,我认为它会 也可以在RecyclerView中使用。但经过一段时间的探索, 我觉得要花很多时间来实现自定义 布局经理和对此的相当程度的理解。(我看了 关于Dave关于Building Custom LayoutManager)
的帖子
所以,现在我想我可能只需要根据我的要求使用ListView变体,而不是处理这种复杂的自定义布局管理器。
但是,我只需要让里面的物品重叠。我觉得可能还有其他方向我还没有意识到。如果除了ListView varient 和自定义布局管理器之外还有,请告诉我。
我也会在下面发表我的发现。
答案 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
}
}