Android高手秘笈之View的事件分发

目录

1.简述点击事件传递过程?

2.onTouch和onTouchEvent的区别?

4.View的事件分发处理流程图?

3.ViewGroup的事件分发处理流程图?


进阶篇详见我的另外一篇文章:https://blog.csdn.net/geduo_83/article/details/86560896

1.简述点击事件传递过程?

  • 1.1 Activity的dispatchTouchEvent方法接受事件【Activity对事件进行传递】
  • 1.2 Activit将事件传递给PhoneWindow的superDispatchTouchEvent方法【PhoneWindow对事件进行传递】
  • 1.3 PhoneWindow将事件传递给DecorView的的superDispatchTouchEvent方法【DecorView对事件进行传递】
  • 1.4 ViewGourp的DispatchTouchEvent接收事件【ViewGroup对事件进行分发】 

      1.4.1 ViewGourp的onInterceptTouchEvent拦截判断,如果有拦截则自行进行事件分发,如果没有拦截则把事件传递给子View进行分发

  • 1.5 子View的DispatchTouchEvent接收事件

       1.5.1 如果子View有自定义的触摸事件监听器则先进行自定义监听器的处理,处理完毕如果消费此事件,则系统自带的事件处理器就不处理了,否则系统自带的事件处理器要进行接着处理
       1.5.2 如果子View没有自定义的触摸事件监听器则直接调用系统自带的事件监听器
       1.5.3 事件的处理是连续的,只有上一个事件处理返回为true才能进行下一个事件的处理


2.onTouch和onTouchEvent的区别?

  • 2.1 onTouch:用户自定义触摸事件监听器
  • 2.2 onTouchEvent:系统自带的触摸事件监听器
  • 2.3 系统默认是以自带的事件监听器为标准的进行处理的
  • 2.4 用户可以自定义触摸事件处理器,如果不想在麻烦系统自带处理器了哪些就返回true,如果还需要系统进行处理那么就返回false,系统处理器会接着进行进一步处理

4.View的事件分发处理流程图?

触摸事件的传递流程是从dispatchTouchEvent开始的,如果不进行人工干预,则事件将会依照View树的嵌套层次从外层向内层传递,到达最内层的View时,就由它的onTouchVent方法处理
如果事件在传递过程中,进行了人工干预,事件分发函数返回true表示自行消费,返回父类的同名方法则该事件传递给自身的onTouchEvent进行处理,返回false表示该事件会回传给父view的onTouchEvent方法进行处理,此时后面的事件都接受不到了,最后由哪个View处理,以后的所有事件都交由它来处理
如果事件在传递过程中,进行了人工干预,事件处理函数,返回true和调用同名方法表示该事件被消费,返回false则表示该事件回传给父类的同名方法进行处理
事件触发是先触发onTouch,再触发onClick,如果onTouch方法返回tue,表示消费掉该事件,不在继续进行事件传递,onClick也不会被调用,如果onTouch方法返回false,则继续会事件传递,onClick会被调用

3.ViewGroup的事件分发处理流程图?

触摸事件的传递顺序是由Activity到ViewGroup,再由ViewGroup递归传递给他的子View,ViewGroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回true,则事件不会继续往下传递给子View,如果返回false或者是调用super.onInterceptTouchEvent,则事件会继续会传递给子View
如果事件在传递过程中,进行了人工干预,事件分发函数返回true表示事件被自行消费,返回false,则回传给父View的onTouchEvent进行处理,此时后面的事件都接受不到了,调用同名方法则继续传递
如果事件在传递过程中,进行了人工干预,事件处理函数,返回true则表示该事件被消费,返回false和调用同名方法则表示该事件回传给父类的同名方法进行处理 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门心叼龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值