【问题标题】:How to apply ItemDecoration from left and right side both to RecyclerView item?如何将 ItemDecoration 从左侧和右侧都应用到 RecyclerView 项目?
【发布时间】: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 你试过用动画来做吗?这是类似的问题stackoverflow.com/q/33269409/548208
  • @DhruvMevada 是的,它也给出了与负边距的 ItemDecoration 相同的结果。
  • 也许这个库可以帮助你,虽然我自己从来没有用过 - github.com/yarolegovich/DiscreteScrollView

标签: android android-recyclerview kotlin item-decoration


【解决方案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 中的选定项目下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2015-09-27
  • 2022-11-20
  • 2019-03-08
  • 2017-09-29
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多