Chinaunix首页 | 论坛 | 博客
  • 博客访问: 507350
  • 博文数量: 158
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 904
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-10 11:17
文章分类

全部博文(158)

文章存档

2018年(74)

2017年(84)

我的朋友

分类: Android平台

2018-08-08 15:20:25

假设事件传送路径为A-B-C-D-E; 

一个手势是由事件action_down开始和action_move等其它事件以及事件action_up结束的集合;

 一个action_down意味着一个新的手势的开始,aciton_up意味着一个手势的结束; 

事件由activity的dispatchevent开始,通过调用子view(包括viewgroup)的dispatchevent向下传递,直到为一个view为止; 

之后事件会由最下层的view向上传递,由onTouchEvent进行处理,一直传递到activity的onTouchEvent; 

首先框架层最先处理的是action_down事件,如果此事件在传递过程中没有被oninterceptEvent掉(返回true为阻止),那么此事件将一直传递到最下层; 

此时事件将开始由下开始往上传递,并且如果在途中某一层(假设为D)消费掉(即onTouchEvent返回true),那么此事件将终止向上传递,并且以后事件也会通过D的dispatchEvent方法直接调用onTouchEvent方法进行处理(事件传递顺序A-B-C-D); 

如果传递过程中没有任何onTouchEvent进行消费,那么以后此事件将直接由activity的onTouchEvent进行处理。这意味着如果你想在某一层处理手势,你务必要在该层消费action_down以确保以后可以接收到事件。

 action_down事件处理结束后将开始其它事件的处理(以下事件都是除了action_down的事件); 

你可以在某一层的onInterceptEvent中随时决定是否终止向下传递事件,这取决于你的手势处理逻辑;onInterceptEvent之后你将永远不能在向下传递事件了。 requestDisallowInterceptTouchEvent将阻止viewgroup对事件进行中断; 

如果在某一层onTouchEvent处理某一事件,并进行消费掉,那么该事件将不会在向上传递;否则将继续向上传递。

阅读(1472) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~