双纵向嵌套滑动冲突
日常开发中经常遇到滑动冲突的问题,今天给大家介绍一种纵向嵌套的滑动冲突解决方法。这里主要讲下纵向嵌套的情况,横纵向嵌套类似,只是判断条件不一样而已。这里介绍父ScrollView嵌套子Scrollview。下面介绍两种解决方法:
1.通过ViewGroup去处理
默认情况下,当我们滑动整个页面的时候,父ScrollView消费掉滑动事件,子ScrollView则无法滚动,所以这里可以通过修改父ScrollView的onInterceptTouchEvent方法来根据具体情况来选择是否拦截,当不拦截的时候,就不会执行自己的滑动事件,这时我们的子ScrollView就可以执行自己的滑动事件。这里我根据具体滑动区域去判断。下面看下具体代码:
父ScrollView
1 | public class GroupScrollView extends ScrollView { |
布局文件
1 | <com.arun.test.GroupScrollView xmlns:android="http://schemas.android.com/apk/res/android" |
2.通过子View去处理
虽然滑动事件存在冲突,但子ScrollView的onTouchEvent还是可以执行,可以在子ScrollView的onTouchEvent中去主动通知父ScrollView让它不拦截自己的事件,通过requestDisallowInterceptTouchEvent(true)来请求。这样父ScrollView就不会
拦截子ScrollView的滑动事件。
子ScrollView
1 | public class ChildScrollView extends ScrollView { |
布局文件
1 | <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" |
总结
滑动冲突的两种解决办法:1.处理外部ViewGroup的拦截方法;2.在子View的onTouchEvent里通知父ViewGroup不去拦截自己的滑动事件。个人理解的还不是太透彻,比较简单点。