##.总结
当有滑动效果的多个View嵌套使用的时候,就有可能导致滑动冲突问题。
其本质其实是,滑动事件分发出了问题,即我们希望一个滑动事件在某种状态下交由A View来处理,却交给了B View来处理。解决问题的方法,当然就是根据具体场景的特点,通过滑动轨迹或者业务状态,判断出各种情况下的滑动操作与目标View的对应关系,然后通过View的onInterceptTouchEvent()等方法将滑动事件在各个状态下分发给对应的目标View。
常见场景有3种,但解决思路总结起来都是上面那一套:
1.内部View和外部View滑动方向不一致:通过滑动轨迹的方向就可以判断出当前应该分发给谁。
2.内部View和外部View滑动方向一致:要结合业务逻辑状态判断出当前应该分发给谁。
3.多层View嵌套,既有内部外部滑动方向不一致的情况,也有滑动方向一致的情况:将以上两种方法结合起来。
##.具体解决方法和示例
考虑典型场景:一个ViewGroup内部嵌套了一个非ViewGroup的View,两个组件都能进行滑动操作。其它多层嵌套的情况,都可以通过该场景的思路来处理。
1.外部拦截法,只需要调整外部ViewGroup,示例代码如下:
思路:修改拦截逻辑,ACTION_DOWN要放过,否则所有事件都无法传递到子View;ACTION_UP要放过,否则子View的所有点击事件都会失效。针对ACTION_MOVE做需要的判断,针对需要的情况,做拦截由自己处理,否则就传递给子V