从零开始实现一个嵌套滑动的PageView

  1. 基本整体上的思路
    由最底层的子PageView负责计算,正常情况下按一般的pageView的逻辑来,当遇到需要嵌套滑动的时候,计算出滑动结果并调用父Page的controller。
    所以按照这个逻辑,底层的scrollerController就是操作核心,计算逻辑什么的放在那里,然后需要的时候控制父page就行
  2. 计算核心逻辑
    正常情况直接参考pageView 的就行,我们唯一需要考虑的是嵌套滑动情况,这部分参考nestedScrollerView的部分,说白了就是判断一下是否是过度滑动、快速滑动什么的,在需要的情况下交给父ScrollerController处理。所幸的是,基本的动画、复位算法,已经有现成方法实现,是否是过度滑动也可以通过controller所绑定的position中携带的pixel、maxScrollExtent、minScrollExtent等信息来判断,所以问题也不大
    3、如何打通父page和子Page
    还是参考NestedScrollerView,PrimaryScrollerController提供了一种传递controller的方式,所以父Page只需要将自己的controller放入PrimaryScrollerController这个InHeritedWidget即可,子Page通过它就能拿到controller,进而控制父page的滑动。
    需要做的事
    1.修改pageView,使其有PrimaryScroolerController2.自定义ScrollerController,提供position和相关必要信息3.自定义ScrollerPosition,并让其继承ScrollActivityDelegate,自定义activity和控制逻辑,加入计算核心逻辑
    还可以拓展一下
    套娃功能,现在目前是父page和子page是分开的,但是想一想,父page其实也就提供自己controller一个很小的功能,完全可以整合到子page中去,直接用一个pageView自动判断需不需要嵌套功能嘛(说白了就是判断下能不能通过PrimaryScrollerController拿到父page的自定义ScrollerController就行了)
    后记
    谁能想到这个春节假期这么长……回来人傻了,差点认不出我之前写的啥…………赶快插个眼理一下思路
发布了68 篇原创文章 · 获赞 1 · 访问量 956

猜你喜欢

转载自blog.csdn.net/A669MM/article/details/104851190