Android滑动冲突解决

##.总结

    当有滑动效果的多个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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值