Android 屏幕触摸事件的流程分析

本文深入剖析了Android屏幕触摸事件的流程,从Activity到View的分发,再到ViewGroup的拦截与处理。通过示例解释了dispatchTouchEvent、onTouchEvent和onInterceptTouchEvent在事件传递中的角色,以及ACTION_DOWN、ACTION_MOVE和ACTION_UP的处理规则。了解这些可以帮助开发者更好地控制触摸事件的处理。
摘要由CSDN通过智能技术生成

 

Android 事件分发流

 

 话不多说,先上一张图来了解下:

 

事件从左上角白色箭头开始,由Activity的dispatchTouchEvent做分发

 

箭头上面的字代表方法返回值

dispatchTouchEvent和 onTouchEvent的框里有个【true---->消费】的字,表示的意思是如果方法返回true,那么代表事件就此消费,不会继续往别的地方传了,事件终止

目前所有的图的事件是针对ACTION_DOWN的,对于ACTION_MOVE和ACTION_UP我们最后做分析

仔细看整个图,我们得出事件流 走向的几个结论

1、如果事件不被中断,整个事件流向是一个类U型图,我们来看下这张图,可能更能理解U型图的意思。

所以如果我们没有对控件里面的方法进行重写或更改返回值,而直接用super调用父类的默认实现,那么整个事件流向应该是从Activity---->ViewGroup--->View从上往下调用dispatchTouchEvent方法,一直到叶子节点(View)的时候,再由View--->ViewGroup--->Activity从下往上调用onTouchEvent方法。

2.dispatchTouchEvent 和 onTouchEvent 一旦return true,事件就停止传递了

3.dispatchTouchEvent 和 onTouchEvent return false的时候事件都回传给父控件的onTouchEvent处理。

看上图深蓝色的线,对于返回false的情况,事件都是传给父控件onTouchEvent处理。对于onTouchEvent return false 就比较简单了,它就是不消费事件,并让事件继续往父控件的方向从下往上流动。

4、dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent 在ViewGroup 和View的这些方法的默认实现就是会让整个事件安装U型完整走完,所以 return super.xxxxxx() 就会让事件依照U型的方向的完整走完整个事件流动路径),中间不做任何改动,不回溯、不终止,每个环节都走到。

所以如果看到方法return super.xxxxx() 那么事件的下一个流向就是走U型下一个目标。

5、onInterceptTouchEvent 的作用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值