读《android开发艺术探索》笔记一:View的事件分发机制

View的事件分发机制:对于一个根viewgroup来说,点击事件产生后,首先会传递给它,这是它的dispatchTouchEvent就会被调用,如果这个viewGroup的OnInterceptTouchEvent方法返回true就表示它要拦截当前事件,接着事件就会交给这个viewGroup处理,即它的onTouchEvent方法就会被调用;如果这个ViewGroup的OnInterceptTouchEvent方法返回false就表示它不拦截当前事件,这时当前事件就会继续传递给它的子元素,接着子元素的dispatchTouchEvent方法就会被调用,如此反复直到事件被最终处理。

当一个View需要处理事件时,如果它设置了OnTouchListener,那么OnTouchListener中的onTouch方法会被回调。这时事件如何处理还要看onTouch的返回值,如果返回false,则当前view的onTouchEvent方法会被调用,反之不调用。由此可见,给view设置的OnTouchListener,其优先级比onTouchEvent要高,在onTouchEvent方法中,如果当前设置的有OnClickListener,那么它的onClick方法会被调用。可以看出,平时我们常用的OnClicKListener,其优先级最低,即处于时间传递的尾端。
一个点击事件的产生,它的传递过程遵循如下顺序:activity->window->view,事件总是先传递给activity,activity再传递给windows,最后windwos再传递给顶级view。换个思路,假设一个事件是一个难题,这个难题最终被上级领导分给了一个程序员去处理,结果这个程序员搞不定(onTouchEvent返回了false),现在该怎么办呢?难题必须要解决,那只能交给水平更高的上级解决(上级的onTouchEvent被调用),如果上级再搞不定,那只能交给上级的上级去解决,就这样将难题一层层的向上抛,这是企业内部一种很常见的处理问题的过程。

这里我画了一个流程图,如果理解有错误,还请指出一起学习
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值