Android view嵌套滑动冲突的解决方案(一scrollview嵌套listview滑动冲突和高度不正常的问题)

本文介绍了Android中ScrollView嵌套ListView时的滑动冲突问题及其原因,包括三种常见场景:滑动方向不一致、一致及组合嵌套。解决冲突的方法包括外部拦截法和内部拦截法,并提供了布局高度调整和自定义ListView的解决策略。
摘要由CSDN通过智能技术生成

近段时间,自己在做之前项目经验的一些总结,也刚好今天有个刚进入Android开发没多久的伙计问我塔项目中遇到的滑动冲突的问题,就是scrollView嵌套的listview。今天帮他解决问题的同时也记录下自己之前项目中遇到的冲突的解决方案。

首先我们来看下滑动冲突的原因:借助任玉刚刚哥的《Android开发艺术探索》这本书,可以参考155到157页,同时也可以看下140页到154页的view的分发事件。看过之后就很清楚啦。view的滑动冲突无非就是在手指在滑动时拥有两个可以同时滑动的view控件。常见的场景通常有以下三种情况:

1)、外部滑动方向和内部滑动方向不一致;

2)、外部滑动方向和内部滑动方向一直;

3)、以上两者的情况的嵌套;

场景一这种场景:也是我们最常见的,比如说我们做应用时经常使用的fragment+viewpager组合而成的底部菜单页面切换的效果,他们滑动的方向时不一致的。fragment中的scrollview、listview等本来是应该有滑动冲突的,但是google已经帮我们解决啦这样的冲突在viewpager中。但是如果是scrollview嵌套listview就需呀处理啦,不处理的话就会造成内位两层只能有一层可以滑动。出啦这种,像外部上下滑动、内部左右滑动都属于这种。

场景二:当内外两层在同一个方向滑动的时候,这种是存在逻辑问题,当手指开始滑动时,系统无法知道是到底用户想要那个滑动。要么就是只有一层能够滑动,要不就是内外两层滑动的都非常的卡,我在项目中就是遇到这样的问题(内外俩层同时上下滑动)。

场景三:场景三时前两种场景的组合嵌套。这种情况更加的复杂,但是仔细分析下来又可以看出来,他们又是几种简单冲突分析的组合叠加。所以需要分别处理内中外存在的冲突即可。

其次、懂得造成冲突的原因,我们就来看冲突的解决办法。根据以上三种滑动冲突的场景,我们仅需要修改滑动规则即可。

1)、外部拦截法:

在控件的onInterceptTouchEvent方法中根据手勢的上滑下滑或者左滑右滑,设置是否拦截滑动事件

2)、内部拦截法:

是指父容器不拦截任何事件,所有事件都传递给子元素。需要此事件就消耗掉,否则就直接传递给父容器处理。此种方法需要配置requestDisallowInterceptTouchEvent方法才能正常工作。需要在父容器中的dispatchTouchEvent和自容器的onInterceptTouchEvent   两个方法中共同做逻辑判断才可以。

最后、除啦上述的滑动冲突以外,还有就是同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值