如何将 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 指示器从右侧移动到左侧?

如何在屏幕的左侧和右侧放置 Angular Material 单选按钮?

从右侧移动到奇数位置,从左侧移动到偶数位置

如何使用左侧的占位符和右侧的编辑文本创建 UITextField?