ViewPager2的滑动回弹动画
首先分析回弹动画的效果,滑动小于一定阈值时,松手后触发,页面回弹到原位置。
切入点
第一反应就是onTouchEvent
,发现ViewPager2
没有重写,并且它是一个ViewGroup
,我们看它初始化的时候设置了什么,调用了 initialize
,看到最终嵌套了一个自定义的RecyclerView
,发现没有重写onTouchEvent
,那么只有可能通过addOnScrollListener
来拦截触摸。
继续分析initialize
,我们可以把目标锁定在ScrollEventAdapter
和PagerSnapHelperImpl
,通过查看类描述,我们可以基本确定是在PagerSnapHelperImpl
中实现的。
源码分析
我们首要目标是追踪addOnScrollListener
public void attachToRecyclerView(@Nullable RecyclerView recyclerView)
throws IllegalStateException {
...
mRecyclerView = recyclerView;
if (mRecyclerView != null) {
setupCallbacks();
...
}
}
private void setup