1. 仅仅有图片可以参考.
1. 首先你得知道正常的事件分发机制,即当一个事件被某个拦截时,当前手势接下来的事件都会交给View进行处理。
2. 这也是为什么ScrollView嵌套ListView 产生滑动冲突,体验不佳的原因。
3. 使用NestedScrollParent组合NestedScrollChild并不是改变这种机制,而正是利用这种机制进行恰当的回调。
4. NestedScrollParent和NestedScrollChild是2个接口,实现NestedScrollParent的View不再需要拦截scroll事件。
5.也就是说全程处理滑动事件的仅仅是子View 但是子View能滑动多少,实现NestedScrollParent的父View说了算。
5. 实现NestedScrollChild接口的子View 需要在touch事件里恰当的处理好回调方法,及时准确的通知父View 自己准备要进行的动作。
6. 子View 通过把scroll的动作告知父View ,父View可以通过实现回调的方法来响应这些回调 1.处理自身的位置 2.告知子View要处理的位置。
7. 举个栗子:RecyclerView接到滑动事件,要向上滑动10,再没滑动之前 把要滑动的情况优先告知父View(实现NestedScrollParent)。
8. 父View再接到RecyclerView可以产生向上滑动10的时候优先做出处理,先让自己身滑动5,并告知RecyclerView “我已经消费了5”。
9. RecyclerView 把本来要消费的10 和已经被父View消费的5 综合起来判断自己要消费多少。即RecyclerView仅仅向上滑动了5.
10. 所以关键点就在于你什么时候想消费、并且消费多少 子View的滑动,这影响到父View和子View的具体展示。
布局:仅仅是一个父容器(实现NestedScrollParent) 内嵌入 TopView 和实现了NestedScrollChild的RecyclerView。
<?xml version="1.0" encoding="utf-8"?>
<com.yushilei.nestedscrolling.NestedScrollLayout
android:id="@+id/nested"
xmlns:android="http://schemas.an