- View 的滑动冲突 ==
-
外部滑动方向和内部滑动方向不一致。 这种场景主要是在 ViewPager + Fragment 组合的页面滑动效果,
Fragment
中往往放的是一个ListView
或者RecyclerView
。由于,ViewPager
内部已经处理了这种滑动冲突,所以无需关心。但是换成ScrollView
的话,就有问题了。 -
外部滑动方向和内部滑动方向一致。 这种场景发生在 ScrollView + EditText 的场景。
ScrollView
会拦截事件,造成EditText
无法滚动。 -
以上两种情况的嵌套。 内层存在 第一种冲突,外层存在 第二种冲突。
外部拦截法: 点击事件都经过 父容器 的拦截处理。
需要覆写 父容器 的 onInterceptTouchEvent
方法。
内部拦截法: 是 父容器 不拦截任何事件,所有的事件都传递给 子元素,如果 子元素 需要此事件就直接消费掉,否则就交给 父容器 进行处理。
需要配合 requestDisallowInterceptTouchEvent
方法才能进行处理。同时要覆写 子元素的 dispatchTouchEvent
方法 。