如何将 ItemDecoration 从左侧和右侧都应用到 RecyclerView 项目?
Posted
技术标签:
【中文标题】如何将 ItemDecoration 从左侧和右侧都应用到 RecyclerView 项目?【英文标题】:How to apply ItemDecoration from left and right side both to RecyclerView item? 【发布时间】:2019-02-02 00:34:18 【问题描述】:长期以来,我一直在努力实现这一目标。我想要的是从左右重叠选定的RecyclerView
项目,如下图所示。
我可以通过ItemDecoration
实现向左或向右,如下所示:
class OverlapDecoration(private val overlapWidth:Int) : RecyclerView.ItemDecoration()
private val overLapValue = -40
val TAG = OverlapDecoration::class.java.simpleName
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State?)
val itemPosition = parent.getChildAdapterPosition(view)
if (itemPosition == 0)
return
else
outRect.set(overLapValue, 0, 0, 0)
到目前为止,我已经实现了如下图所示。
我已经尝试过CarouselLayoutManager,但这不是我想要的。
【问题讨论】:
将 itemDecoration(一次将重叠值分配给左端和右端)设置为 selctedItem 并将 null 设置为另一个没有帮助? @VirRajpurohit 已经试过了,不行! @Maddy 你试过用动画来做吗?这是类似的问题***.com/q/33269409/548208 @DhruvMevada 是的,它也给出了与负边距的 ItemDecoration 相同的结果。 也许这个库可以帮助你,虽然我自己从来没有用过 - github.com/yarolegovich/DiscreteScrollView 【参考方案1】:要达到您正在寻找的结果,您需要采取两个步骤:
首先,修正装饰器计算:
if (itemPosition == 0)
return
else
outRect.set(-1 * overLapValue, 0, overLapValue, 0) //Need left, AND right
其次,你需要实际添加阴影
而且,对课程进行一次快速清理,您不需要private val overLapValue
。
改为:
class OverlapDecoration(private val overlapWidth:Int = 40) : RecyclerView.ItemDecoration()
【讨论】:
谢谢,但这不是我想要的!它只会增加正确项目的空间。实际上,我希望将正确的项目放在 RecyclerView 中的选定项目下。以上是关于如何将 ItemDecoration 从左侧和右侧都应用到 RecyclerView 项目?的主要内容,如果未能解决你的问题,请参考以下文章
VIM:如何从左侧的 NerdTree 面板以 vsplit 的形式在右侧打开文件?
是否可以将 UIScrollView 指示器从右侧移动到左侧?