Android 如何在LinearLayoutManager-RecyclerView中重叠项目(如堆叠卡片)
Android 如何在LinearLayoutManager-RecyclerView中重叠项目(如堆叠卡片),android,listview,android-recyclerview,Android,Listview,Android Recyclerview,这是否可能与RecyclerView中的项目重叠? 我正在与LinearLayoutManager一起尝试这一点。 我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。(像叠卡片) 我已经通过使用ListView看到了。所以,我想会的 在RecyclerView中也是可能的但是经过一段时间的探索, 我觉得实现一个定制需要相当长的时间 布局经理对此有相当程度的了解。(我看了 进入Dave关于的帖子) 所以,现在我想我可能只需要根据我的需求使用ListVie
这是否可能与RecyclerView中的项目重叠?
我正在与LinearLayoutManager一起尝试这一点。
我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。(像叠卡片) 我已经通过使用ListView看到了。所以,我想会的 在RecyclerView中也是可能的但是经过一段时间的探索, 我觉得实现一个定制需要相当长的时间 布局经理对此有相当程度的了解。(我看了 进入Dave关于的帖子) 所以,现在我想我可能只需要根据我的需求使用ListView变体,而不是处理如此复杂的定制布局管理器 但是,我只需要让里面的项目重叠。我觉得可能还有其他我还没有意识到的方向。请告诉我除了上面的ListView变量和自定义布局管理器之外是否还有任何。 我也会把我的发现贴在下面
我假设您正在寻找部分重叠(例如,一副略微呈扇形展开的牌)。如果是这样的话,使用RecyclerView和定制ItemDecoration似乎相当简单。下面是一个简单的示例,其中项目垂直重叠90像素:
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。我已经用交错网格试过了,但它也应该与线性布局和网格LM一起使用。您可以使用
回收视图的项目装饰实现
设置项目装饰:
var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter
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
}
}
创建项目装饰类:
var customAdapter = CustomListAdapter()
recyclerView.addItemDecoration(MyItemDecoration()) // here set decoration in recyclerview
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = customAdapter
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
}
}
它有一个奇怪的行为,只显示可以完全绘制的项目。它不会显示下一个项目的顶部在最底部的下面。我知道这个答案可能不适合所有人,但我不理解否决票。它确实有效,即使如shiami所说,它没有显示下面项目的顶部。这仍然是所有人对这个9个月前的问题提供的唯一答案,也是唯一不需要自定义布局管理器的建议方法。对于那些想知道如何避免顶部项目的人,请尝试以下操作:final int itemPosition=parent.getChildAdapterPosition(view);if(itemPosition==RecyclerView.NO_POSITION){return;}
获取视图的位置。跳过顶部项目的outRect.set()
行。完美,正是我想要的,而不是堆叠第一个项目<代码>int itemPosition=parent.getChildAdapterPosition(视图);如果(itemPosition!=0){outRect.set(yoursoffset,0,0,0);}
也许你可以利用这个项目?