12.Android事件分发过程

参考博客:https://www.jianshu.com/p/38015afcdb58

Activity、ViewGroup、View

Activity的事件分发过程:

activity通过superDispatchTouchEvent()向ViewGroup传递事件,传递事件成功则返回true,否则返回false;若返回false,需要activity自行处理事件,因此调用onTouchEvent()。

ViewGroup的事件分发过程:

首先承接activity返回true的步骤,ViewGroup同理也会调用DispatchTouchEvent();

然后这里有一个区别,就是多了一个拦截函数onInterceptTouchEvent(),可根据自身要求进行复写,否则默认为不拦截;

若不拦截,将使用for循环来遍历ViewGroup下的子view,寻找正在被点击的view,找到后同样用DispatchTouchEvent()向View传递事件;

若拦截,要么你自行设置了拦截或者点击的空白处所以没有view响应,因此ViewGroup需要自行处理事件,调用OnTouch->OnToucEvent()。

View的事件分发过程:

由上面可知会先触发DispatchTouchEvent(),此时有一个if判断有3个条件:

1、mOnTouchListener不为空,此条件只要给控件注册了onTouch事件都能满足 

2、(mViewFlags & ENABLED_MASK) == ENABLED 此条件默认情况下一般为true,所以可以不用理会

3、mOnTouchListener.onTouch(this, event),这个函数需要手动重写定义,所以一旦它为true,则View.dispatchTouchEvent()直接返回true,事件分发结束;否则,View.dispatchTouchEvent()中跳出If,执行onTouchEvent(event)。

onTouchEvent的函数分析:先判断控件是否可点击并且用户点击有效,然后根据点击情况(抬起、放下、结束、滑动)来处理事件,一般默认在用户点击完成抬起手后执行执行performClick()函数,里面主要是:只要我们给控件注册了点击事件,那么就会继续往下回调OnClick函数,继而完成点击事件的处理。

 

这是我自己看完那篇博客总结出来的一些要点,更多细节的内容大家可以看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值