Android 事件处理机制

推荐博客:http://blog.csdn.net/cyp331203/article/details/45071069
推荐博客:http://blog.csdn.net/guolin_blog/article/details/9097463
推荐博客:http://blog.csdn.net/guolin_blog/article/details/9153747

总结:
Android事件处理可以分为三类:Activity、ViewGroup、View
一、Activity:dispatchTouchEvent方法、onTouchEvent方法
二、ViewGroup:onInterceptTouchEvent方法、dispatchTouchEvent方法、onTouchEvent方法
三、View:dispatchTouchEvent方法、onTouchEvent方法

Android视图是个树形结构,遍历方式是从上向下的方式,事件传递也是这样。
事件首先进入Activity的dispatchTouchEvent方法,遍历其包含的ViewGroup;再进入ViewGroup的dispatchTouchEvent方法,调用onInterceptTouchEvent方法,若返回true,表示拦截事件,进入ViewGroup的onTouchEvent方法;若返回false;进入其子View或ViewGroup的dispatchTouchEvent方法中;如果这个事件都没有消耗,最后会返回Activty的onTouchEvent方法。

一些要点:
1、Touch事件是由硬件捕获到触摸后由系统传递给应用的ViewRoot,再由ViewRoot往下一层一层传递.

2、处理过程都是自上而下的分发,可以看成是由布局的“包含”关系,自顶向下的方式

3、事件存在消耗,事件的处理方法都会返回一个boolean值,如果该值为true,则本次事件下发将会被消费掉,而不会继续往下一层传递.

4、Touch事件从ACTION_DOWN开始,也就是按下的这个action开始算起,到ACTION_UP抬起时结束;但是如果在ACTION_DOWN的时候,没有接受事件,那么后续的其他动作也将不会被接受

5、dispatchTouchEvent方法,是用来分发上层传递过来的事件的,它在View和ViewGroup中都有实现

6、onInterceptTouchEvent方法,是用来拦截事件传递的,它只在ViewGroup中有实现,在View中没有

7、view对象的TouchLitener中的onTouch方法总是会先于view自己的onTouchEvent(event)方法被执行,这是由View中的dispatchEvent方法决定。

8、Activity中的onTouchEvent只会在能响应的所有view都响应完事件,且都没有消费掉事件之后才会被调用。

9、如果一个ViewGroup被点击的地方,有多个子View/ViewGroup可以响应点击事件,那么它们响应的顺序是:后addView进来的子view/ViewGroup先响应事件或者是xml布局文件中后被添加的view先 响应触摸事件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值