Android事件传递机制分析

一、Android最基本的屏幕操控事件

down:按下事件。

move:移动事件。

up:离开事件。

二、在总结的事件传递机制时,先介绍一下ViewGroup与View有关事件传递的方法

ViewGroup有dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent方法 

  1. ViewdispatchTouchEvent、onTouchEvent方法

dispatchTouchEvent:触摸事件分发。

onInterceptTouchEvent:触摸事件拦截。返回true时,拦截该动作;返回false时,不拦截该动作。

onTouchEvent:触摸事件消费。返回true时,消耗该动作;返回false时,不消耗该动作。

三、事件分发流程图 

分发的是down事件,down事件的分发是为了寻找一个可以处理完整事件的控件,down被处理move和up也就被处理了

注:此事件分发图是不包括拦截的 
这里写图片描述 
解释:down事件从activity开始往下层子控件分发,分发到没有子控件的控件view,不能继续往下分发了,所以view开始调用onTouchEvent方法判断自己是否能处理该事件,若返回true代表消耗了该事件,view的dispatchTouchEvent方法也返回true,事件结束;若返回false,代表处理不了这个事件,则down事件往上返回到viewgroup2,viewgroup2的处理同view,此处不再赘述。

带有拦截(onInterceptEvent)的事件分发,返回true表示拦截,false表示不拦截。拦截的意思就是强制停止向下分发,此时该控件将要判断自身是否能处理该事件,如果处理不了就继续向上返回,返回让上一级处理,如果该控件可以处理该事件则事件被消耗,事件结束。

程序运行截图


四、 onTouch方法的返回值说明

 return true:事件被消耗,不会继续向下传递。

return false:事件没有被消耗。虽然 onTouch事件中没有super.onTouch()方法,但是该事件还是会继续传递,给该控件的其他方法使用,或给其他的控件使用。

转载自:http://blog.csdn.net/z1941563559/article/details/54973886
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值