1、外部拦截法
- 场景:外部滑动方向与内部滑动方向不一致。如,HorizontalScrollView 嵌套 RecyclerView。为什么不用 ViewPager 嵌套 RecycleView?那是因为 ViewPager 内部已经解决这种滑动冲突了。
- 解决:
重写父容器的 onInterceptTouchEvent 方法,子 View 不用做任何修改
2、内部拦截法
- 场景:外部滑动方向与内部滑动方向一致。如,垂直的 ScrollView 嵌套 RecyclerView。
- 解决:
重写子 View 的 dispatchTouchEvent 方法。
父容器需要拦截处理 ACTION_DOWN 以外的所有事件。然后通过在子 View 中调用 requestDisallowInterceptTouchEvent 方法来控制父容器是否截断事件