如何使用 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
}
我有一个 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
}