Android事件分发机制

- dispatchTouchEvent():分发事件
- onIntercepteTouchEvent():拦截事件
- onTouchEvent():处理事件

1、当一个事件发生时,事件首先会传递到Activity的dispatchTouchEvent()方法中,而每一个Activity都持有一个Window对象,但是Window是一个抽象类,这里的Window指的就是PhoneWindow,它是在Activity的attach()方法中创建出来的,所以Activity的dispatchTouchEvent()方法又会调用PhoneWindow的superDispatchTouchEvent()方法

2、PhoneWindow又持有一个DecorView,DecorView与Window的关联是在ActivityThread创建Activity的时候,会将DecorView加入到Window里面,从而建立关联。Activity的setContentView()方法,其实就是调用PhoneWindow的setContentView()方法,通过LayoutInflater.inflate()方法将对应的xml布局转换为View并加入到DecorView中

3、DecorView继承于FrameLayout,FrameLayout又继承于ViewGroup,所以PhoneWindow的superDispatchTouchEvent()方法最终会调用ViewGroup的dispatchTouchEvent()方法,自上而下一层一层去进行事件分发

4、如果在自上而下的事件分发过程中,某个View想处理该事件,那么就会调用其onInterceptTouchEvent()方法去进行事件拦截,然后通过其onTouchEvent()方法去处理该事件,如果传递到了最底层的View还是没有处理该事件,那么会由下而上依次传递,最终传递到Activity中,Activity的onTouchEvent方法会被调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值