android事件分发学习

android事件分发学习

很久没有记录博客了,感觉看的很多但是记录的确实挺少,最近系统的看了关于事件分发的模块的内容,记录一下自己的学习轨迹

  • 所有的事件的传递分为三个阶段
  • 分发(Dispatch)对应事件dispatchTouchEvent
  • 拦截(Intercept)对应事件onInterceptTouchEvent
  • 消费(Consume)对应着onTouchEvent方法

dispatchTouchEvent方法

  • 存在于ViewGroup及其子类中,当返回true时候便表示当前视图被消费掉,返回super会继续分发事件
  • 如果当前视图是viewGroup还会调用onInterceptTouchEvent方法,如果返回super和false则不会拦截

onInterceptTouchEvent方法

  • 这个方法只存在于viewGroup及其子类中,在view和acvity中是不存在的,返回true表示拦截,其他表示不进行拦截

onTouchEvent方法

  • 返回值为false时候表示当前视图不处理这个时间同时将时间传回父控件进行处理,将会调用父类控件的onTouchEvent进行处理

不同类的持有的方法分类

不同事件处理如下 : Activity
dispatchTouchEvent
onTouchEvent
ViewGroup
dispatchTouchEvent
onInterceptTouchEvent
dispatchTouchEvent
View
dispatchTouchEvent
onTouchEvent

总结

  • 所有的事件都是从当前activity进行传递,通过 dispatchTouchEvent进行判断,如果满足super则进行分发,同时下发给每一个viewGroup,每一个viewGroup对自己的子控件进行事件的分发,同时viewGroup可以进行事件的拦截,当所有的子控件返回super或者false时候,则事件将会向外传递,调用父类控件的onTouchEvent,如果还是false将会调用activity的onTouchEvent。

最后附上 群主的总结,如果喜欢也可以去看他的博客:android 事件分发

触摸控件(View)首先执行dispatchTouchEvent方法。
在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行,下面会分析)。
如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。
如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。
如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。

总的来说dispatchTouchEvent->onTouch->onTouchEvent->onClick

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值