view的事件分发机制

首先明确要分析的对象为MotionEvent,所谓的点击事件的事件分发就是对MotionEvent事件分发的过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而传递的过程就是分发的过程,这个过程由3个重要的方法共同完成:dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。

  • dispatchTouchEvent
    用来进行事件分发,如果能够传递给当前view,那么此方法一定会被调用,返回结果受当前view的onTouchEvent和下级view的dispatchTouchEvent方法影响,表示是否消耗当前事件。
  • onInterceptTouchEvent
    在上述方法内部调用,用来判断是否拦截某个事件,如果当前view拦截了某个事件,那么在同一个事件序列当中,此方法不会被在此调用,返回结果表示是否拦截当前事件。
  • onTouchEvent
    在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前view无法再次接受到事件。

对于一个根ViewGroup来说,当点击事件产生后,它的dispatchTouchEvent就会被调用,在该方法内部会判断onInterceptTouchEvent方法的返回值,如果onInterceptTouchEvent返回true就表示它要拦截当前事件,拦截后就会交给onTouchEvent处理,如果它的onInterceptTouchEvent返回false,就表示它不拦截当前事件,这时当前事件就会传递给它的子元素,接着它的子元素的dispatchTouchEvent就会被调用,如此反复直到事件被处理。如果传递到最低层控件依然没有被处理,则会从最底层依次调用父控件的onTouchEvent方法。
未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值