Android-事件分发

前言
在Andorid卡法体系中,事件分发是一个比较重要的知识体系,了解整套的分发机制,可以分析各种点击滑动的问题,可以更好的拓展控件的事件功能和自定义控件。
Android的事件分发图解
在这里插入图片描述
图解:(从上往下Activity -> ViewGroup -> View)
从Activity的dispatchTouchEvent开始,通过不同的返回类型,结果也不同

如果事件不被打断,事件流向一个类U型图
在这里插入图片描述
图解:
假设一个DOWN事件到来,从Activity的dispatchTouchEvent开始,如果返回true、false,那么事件被消费,不再往下传递;如果是返回super.dispatchTouchEvent(ev),事件就会传递到ViewGroup的dispatchTouchEvent中,ViewGroup的dispatch返回true,那么事件被消费,返回false,事件会回到Activity的onTouchEvent中,返回super,则会传递到ViewGroup的onInterceptTouchEvent(ViewGroup特有方法)中,onInterceptTouchEvent返回true,事件传递ViewGroup的onTouchEvent中,返回true,事件被消费,返回false、super,事件回到Activity的onTouchEvent中;如果ViewGroup的onInterceptTouchEvent返回false、super,事件则继续向下传递到View的dispatchEvent中,返回true,事件被消费,返回false,事件回到ViewGroup的onTouchEvent中,返回super,传递到View的onTouchEvent中,true则消费,false、super,则事件回到ViewGroup的onTouchEvent。
关于ACTION_MOVE和ACTION_UP
上面都是针对ACTION_DOWN事件传递,而move和up事件和down事件不一样,在执行down事件的时候返回了false,后面一系列其他的action事件则不会执行,只有返回了true,才会收到其他action事件。在哪个View的onTouchEvent 返回true,那么ACTION_MOVE和ACTION_UP的事件从上往下传到这个View后就不再往下传递了,而直接传给自己的onTouchEvent 并结束本次事件传递过程。

参考资料:https://www.jianshu.com/p/e99b5e8bd67b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值