RecyclerView PagerSnapHelper Snap on Start/Top 而不是中心 Android

RecyclerView PagerSnapHelper Snap on Start/Top instead of center Android

我正在使用垂直回收器视图并附加了一个 pagerSnapHelper.it 工作正常并将项目捕捉到中心位置但我希望它捕捉到开始(顶部)。我不想使用 linearSnapHelper,因为它无法按我想要的方式工作。 GravitySnapHelper 也不会在扩展时工作 linearSnapHelper.if 你可以与 PagerSnapHelper 扩展共享一个类似的 class 它会很棒

所以我通过使用 LinearSnapHelper 实现了一个可行的解决方案。使用库捕捉到顶部

图书馆 - https://github.com/rubensousa/GravitySnapHelper

为了实现类似于 pager snap helper 的滚动,我使用了下面的代码

 // remember to initialize snaphelper
 snapHelper = object : GravitySnapHelper(Gravity.TOP){
        override fun findTargetSnapPosition(
            layoutManager: RecyclerView.LayoutManager,
            velocityX: Int,
            velocityY: Int
        ): Int {
            val centerView = findSnapView(layoutManager) ?: return RecyclerView.NO_POSITION
            val position = layoutManager.getPosition(centerView)
            var targetPosition = -1
            if (layoutManager.canScrollHorizontally()) {
                targetPosition = if (velocityX < 0) {
                    position - 1
                } else {
                    position + 1
                }
            }
            if (layoutManager.canScrollVertically()) {

               // Log.d("debug", "velocityY $velocityY")
                targetPosition = if (velocityY < 0) {
                    position - 1
                } else {
                    position + 1
                }
            }
            val firstItem = 0
            val lastItem = layoutManager.itemCount - 1
            targetPosition = Math.min(lastItem, Math.max(targetPosition, firstItem))
            return targetPosition
        }



    }

    // lower the value higher the speed of scroll 
    // default is 100f
    snapHelper.scrollMsPerInch = 40f

    snapHelper.attachToRecyclerView(binding?.yourRecyclerView)