个人对Android Touch事件机制的理解

首先,观看了以下两位大神的文章,获益匪浅,在此提供一下链接:

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

[Android应用]对GroupView中onInterceptTouchEvent方法的理解

 

而我个人关于Touch事件的理解:

android/frameworks/base/core/java/android/view/View.java


dispatchTouchEvent -> onTouch(setOnTouchListener) -> onTouchEvent

Android中touch事件的传递,先传递到ViewGroup,再传递到View

1. dispatchTouchEvent -- 事件分发的入口。会先判断onTouch结果,再判断onTouchEvent结果
 onTouch返回true的话,dispatchTouchEvent return true
 onTouch返回false的话,dispatchTouchEvent 与 onTouchEvent 返回值一致
 
2. 假如有设置OnTouchListener,onTouch就会执行;
 onTouch返回false的话,onTouchEvent就会执行
 onTouch返回true的话,touch事件相当于被消耗掉,onTouchEvent不会执行
 
3. 当View为Enabled和Clickable时,onTouchEvent就会进行Touch事件处理,并且返回true;否则返回false
 在ViewGroup中,onTouchEvent默认返回false
 在ACTION_UP事件中,假如有设置OnClickListener,就会执行onClick事件
 
 -----------------------------------------------------------------------------------------------------
android/frameworks/base/core/java/android/view/ViewGroup.java
1. onInterceptTouchEvent -- ViewGroup用于拦截传递给子View的Touch事件
 返回false,会处理子view的dispatchTouchEvent,接下来的每一个事件都会先传到onInterceptTouchEvent()
 返回true,子view的时间被拦截,会继续处理ViewGroup的dispatchTouchEvent,onTouch 和 onTouchEvent

2. ViewGroup中重写了dispatchTouchEvent方法,具体源码分析如下
http://www.2cto.com/kf/201412/365603.html

 

仅仅通过概览性的官方文档是很难理解onInterceptTouchEvent函数的用途的,只有通过演绎这个抽象的规则,配以图文才能获取这个重要的知识。
很显然,默认是返回false,不做截获。
返回true之后,事件流的后端控件就没有机会处理touch事件了。
把默认的事件流中每个处理函数看作一个节点,这个节点只要返回true, 后续的事件就被截止了,这样想就很好理解。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值