1

我正在使用带有 LinearLayoutManager 和 PagerSnapHelper 的水平回收器视图,并且每个视图持有者/页面都是全屏的并捕捉到窗口,因此一旦解决,只有一个页面可以查看。像大多数全屏滑动标签一样。

在当前页面之后插入新页面时,我想暂时显示/提示它的存在而不捕捉/滚动到它,即这样用户知道他们打开了一个新页面,如果他们想查看它而不强迫他们实际查看它就在那里查看它。

因此,如果您开始稍微拖动手指以暴露下一页,然后再松开并让它重新回到起始页,这将是相同的效果。

我怎样才能做到这一点?谢谢

4

2 回答 2

1

我还没有用 RecyclerView 完成它,但我设法在 ViewPager 上做了类似的事情。基本上,您可以使用带有 CycleInterpolator 的 ValueAnimator 将 RecyclerView 每帧滚动一点点然后返回。由于它的滚动位置随着每一帧而更新,​​我认为这不应该与捕捉发生冲突:

val startX = recyclerView.getScrollX().toFloat()
    val endX = startX + Utils.dpToPx(context, 100) // the amount you want to scroll in pixels


    val animator = ValueAnimator.ofFloat(1f, 0f)
    animator.cancel()
    animator.interpolator = CycleInterpolator(0.5f)
    animator.startDelay = 600
    animator.duration = 600
    animator.addUpdateListener { animation ->
        val alpha = animation.animatedValue as Float
        recyclerView.scrollTo((startX * alpha + (1f - alpha) * endX).toInt(), 0)
    }
    animator.start()

这适用于 ViewPager,也应该适用于 RecyclerView,因为它具有相同的滚动方法可用......

于 2019-06-13T18:06:20.433 回答
1
recyclerView.smoothScrollBy(nudgeDistanceInPx, 0);

这将在 PagerSnapHelper 启动并将其返回到其起始位置之前平滑滚动以显示下一页

于 2019-06-14T08:19:33.480 回答