Android 触摸事件传递

事件传递的三个阶段
分发(dispatchTouchEvent)
  • 返回true表示事件被当前视图消费掉了,不在分发;
  • surper.dispatchTouchEvent表示继续分发该事件;
  • viewGroup及其子类时会调用onInterceptTouchEvent来判断是否拦截该事件
拦截(onInterceptTouchEvent)
  • 只存在 viewGroup及其子类
  • 返回true表示拦截此事件,不继续分发给子视图,同时调用自身onTouchEvent消费
  • 返回falsesuper.onInterceptTouchEvent表示不对事件拦截,继续传给子视图
消费(onTouchEvent)
  • 返回true表示当前视图可以处理对应事件,不向上传递给父视图
  • 返回false表示该视图不处理该事件,上传给父视图的onTouchEvent进行处理
有事件传递能力的类
Activity 和 View

dispatchTouchEventonTouchEvent

ViewGroup

dispatchTouchEventonInterceptTouchEventonTouchEvent

View的传递事件
  • 触摸事件从dispatchTouchEvent开始,不人为干预(调用super.XXX方法),事件按照嵌套从外到里传递,到达最里面的View,由它处理事件,true能处理;false不处理,并由外层的onTouchEvent处理
  • 事件向里传递时,返回ture内层View不在接收事件

  • View控件先执行onTouch,最后执行onClick,如果onTouch 返回true,事件就不传递

ViewGroup的传递事件
  • 触摸事件Activity -> ViewGroup ->View
  • ViewGroup 通过onInterceptTouchEvent事件来拦截,true:不会继续传递给子View;falsesuper.onInterceptTouchEvent:事件传递给子View
  • 子view消费事件后,ViewGroup不在接受
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值