如何使用 RecyclerView 执行轻松滚动

How to perform an eased scroll using RecyclerView

我有一个 RecyclerView 设置,水平 LinearLayoutManager 以整页大小显示视图(即像 ViewPager 那样)。

我想实现的是以编程方式平滑滚动到某个位置。然而,不像 smoothScrollToPosition(int) 那样使用线性滚动,而是使用 ease-in/ease-out 效果。

我查看了 RecyclerView.SmoothScroller,但据我所知,没有办法实现此行为,因为似乎缺少有关总滚动 distance/duration 的信息。

接下来我尝试的是手动使用 scrollTo(int, int),这似乎在 RecyclerView 中不受支持。

我现在使用发送 MotionEvents 来模拟 recylcer 视图上的拖动。但是对于一个应该是简单的问题来说,这感觉太过分了。

还有其他方法可以实现我的目标吗?

您可以尝试创建自定义 RecyclerView 并覆盖 smoothScrollBy 方法:

public class CustomInterpolatorRecyclerView extends RecyclerView {

@Override
public void smoothScrollBy(int dx, int dy) {
    super.smoothScrollBy(dx, dy, new AccelerateDecelerateInterpolator()); //pass your more advanced ease-in/ease-out interpolator here
}