NestedScrollView实现嵌套滑动机制 📅 2026/7/4 9:24:03 一、Android事件分发Android的事件从Activity开始,向顶层view进行分发,顶层view再向次级view,即它的子view进行分发,依次类推,直到找到第一个可以处理此事件的view,事件分发成功。如果,最终都没能找到合适的View,则此事件序列自动消失的。事件派发完后进行事件的消费,如果view不处理该事件,则在onTouchEvent方法里,针对donw事件返回false,表示不消费事件。事件交还给它的父view处理,依次类推,如果都不消费,事件返回给Activity,此事件消失。事件的消费是从子view到父view再到activity。二、NestedScrollView事件处理模型NestedScrollView事件处理模型,是通过由消费事件的View发起和协调。父view被动接收回调,并在回调中处理消费事件,父view回调完成子view继续处理,这样反复进行,达到子view和父view交替消费事件的嵌套滑动效果。我们看到最终的效果可能是:一次事件序列,子view滑动-父view滑动-子view滑动-父view滑动,知道事件被消费完或者达到子view分配上限3次。通过一个简单的事件处理模型理解嵌套滑动:子view消费事件前,总是先询问父view是否需要消费;父view消费事件后,子view在消费剩余的部分;一个事件子view最多询问父view两次,若第三次还有剩余,子view会全部消费掉。中途不论父view还是子view将事件全部消费完,则事件派发提起结束。三、NestedScrollView嵌套滑动源码分析NestedScrollView是AndroidX中的插件,依赖AndroidX之后就可以使用该控件。写一个简单的布局,父控件包含一个图片,一段文字,以及包裹一个子控件。子控件包含一段文字。在子类onTouchEvent方法中实现嵌套滑动:1、在ACTION_DOWN事件中调用startNestedScroll方法,开启嵌套滑动,这里helper是NestedScrollingChildHelper,这个是处理嵌套滑动的帮助类,使用它来简化我们需要处理的工作。