android父子控件手势冲突的解决

本文介绍了Android中父子控件事件分发的原理,包括dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent的作用。重点讨论了ScrollView和ViewPager的冲突问题,当ScrollView拦截了事件导致ViewPager无法正常工作。解决方案是通过重写ScrollView的onInterceptTouchEvent方法,自定义水平和垂直的事件拦截条件,从而避免手势冲突。
摘要由CSDN通过智能技术生成
在android界面开发中,经常可以遇到一些多层控件嵌套的情况,如果父子控件都有对应的手势操作(如scrollview中嵌套pageview),那么他们都手势操作就有可能相互干扰,影响界面的流畅性和体验。

  

首先,要谈一下android父子控件之间事件的分发,对于事件的分发有几个原则需要了解。

     (1) android事件分发是从父控件向子控件逐级分发传递的。

     (2) 每一层控件都可能消费这个事件,消费后不再向下传递(这也是父子控件对于手势操作冲突的主要原因)。          

     (3) android系统中的每个ViewGroup的子类都具有下面三个和事件分发处理密切相关的方法:

              1.public boolean dispatchTouchEvent(MotionEvent ev)            这个方法用来分发TouchEvent

              2.public boolean onInterceptTouchEvent(MotionEvent ev)         这个方法用来拦截TouchEvent

              3.public boolean onTouchEvent(MotionEvent ev)                  这个方法用来处理TouchEvent

      (4) android的触摸是由一个ACTION_DOWN(按下),多个ACTION_MOVE(移动),一个ACTION_UP(抬起)组成。


父子控件间的事件传递,用一张图可以更好的体现:

1

(1)、distachTouchEvent用于分发事件,true直接消费事件并不在分发,false向intercertTouchEvent分发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值