Skip to content

Latest commit

 

History

History
35 lines (17 loc) · 1.36 KB

7. View 的滑动冲突.md

File metadata and controls

35 lines (17 loc) · 1.36 KB
  1. View 的滑动冲突 ==

1. 滑动冲突场景

  • 外部滑动方向和内部滑动方向不一致。 这种场景主要是在 ViewPager + Fragment 组合的页面滑动效果,Fragment 中往往放的是一个 ListView 或者 RecyclerView。由于,ViewPager 内部已经处理了这种滑动冲突,所以无需关心。但是换成 ScrollView 的话,就有问题了。

  • 外部滑动方向和内部滑动方向一致。 这种场景发生在 ScrollView + EditText 的场景。ScrollView 会拦截事件,造成 EditText 无法滚动。

  • 以上两种情况的嵌套。 内层存在 第一种冲突,外层存在 第二种冲突


2. 滑动冲突的解决办法


2.1 外部拦截法

外部拦截法: 点击事件都经过 父容器 的拦截处理。

需要覆写 父容器onInterceptTouchEvent 方法。


2.2 内部拦截法

内部拦截法:父容器 不拦截任何事件,所有的事件都传递给 子元素,如果 子元素 需要此事件就直接消费掉,否则就交给 父容器 进行处理。

需要配合 requestDisallowInterceptTouchEvent 方法才能进行处理。同时要覆写 子元素的 dispatchTouchEvent 方法 。