总结的不是很好,自己也有点看不懂,正好现在用到了,研究了一个,再次总结,方便大家查看

总则:

1.onInterceptTouchEvent中有个Intercept,这是什么意思呢?她叫拦截,你大概知道她作用了吧,她就是你的亲亲小秘书,有什么事,先找秘书,秘书来决定这个事要不要你亲自处理,既然是秘书,是不是每个人都能有呢?当然不是,这个秘书只是viewgroup的,所以只有继承viewgroup的控件才有,那些textview啊button啊什么的,肯定是没有的,为什么?因为他级别不够(继承自view),是不能有秘书滴,注意,如果本级领导决定去的话,那后面的通知就不经过这一级的小秘了,直接发领导。

2.事件的传递顺序,依次发生的是ACTION_DOWN从父控件传向子控件,然后是ACTION_MOVE(可能出现,也可能不出现),最后是ACTION_UP,注意是按顺序从父控件传向子控件,手机上ACTION_MOVE和ACTION_UP基本是都会出现的,是因为手机的传感器很敏感,但是模拟器就不一样,如果没有滑动,是不会出现action_MOVE的,所有的事件,ACTION_DOWN、ACTION_MOVE和ACTION_UP都首先发自根控件(布局文件中最外面一层)的onInterceptTouchEvent中,也就是说,每一个控件都首先会收到onInterceptTouchEvent事件(当然你必须有这个能力收到,原因看上面)

3.有小秘了,有事件了,那就该有领导了,onTouchEvent就是领导了,是处理具体的事件的,领导会首先收到小秘发的ACTION_DOWN事件,领导一看,(1)哇,小秘发的来的,赶紧瞅瞅,晚上是不是有什么活动,一看,还真有活动,又可以带小秘一起出去high了,过瘾,告诉小秘(return true),参加晚上的活动,然后上级小秘会接着把活动的具体安排(ACTION_MOVE和ACTION_UP)也发过来,都由这个领导处理(注意,具体活动是上级小秘直接通知下级领导(OnTouchEvent)的,这里不再需要下级小秘过滤了,因为小秘打扮去了,晚上要陪领导活动呢),其他领导呢,只能望洋兴叹了

(2)如果领导看了,发现不是出去happy的事,这心情郁闷的,又不能跟小秘一起了,这尼玛的,还去个毛啊!不去了!!!告诉小秘呗(return false)不处理,然后小秘就会向上级(父控件)汇报,然后就由上级领导来处理。神马?上级领导不处理,靠,那好吧,都交给他们的祖宗(View)去,查看view源码,你会发现,一样的,如果接受事件,就返回true,接着处理ACTION_MOVE和ACTION_UP,没处理,就返回false,到祖宗这一级了,如果都没人处理,那没办法,这个事件就此消失了,准备处理下一个

<?xml version="1.0" encoding="utf-8"?>
<com.touchstudy.LayoutView1 xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" ><com.touchstudy.LayoutView2android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"><com.touchstudy.MyTextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tv"android:text="AB"android:textSize="40sp"android:textStyle="bold"android:background="#FFFFFF"android:textColor="#0000FF"/></com.touchstudy.LayoutView2>
</com.touchstudy.LayoutView1>

分析一:就上面布局,分析一下,如果不干扰他们各自的方法的返回值,首先是根控件LayoutView1的秘书1(onInterceptTouchEvent)收到通知(ACTION_down),她在想,啊,要不要通知根控件的领导1(onTouchEvent)呢,恩,算了吧,这么重要的领导1,太忙了,日理万机啊,先往下通知吧,看下面有没有人响应,然后直接发给LayoutView2的秘书2,秘书2想这几天陪领导2太累了,想休息下,不告诉他吧,然后又直接下发MyTextView领导3,领导3级别不够啊,没有小秘啊,咋办,自己收通知呗,然后处理,他想啊想,要不要去呢?真纠结,他给自己两条路:

  1.自己去,return true,好,这一级级的返回结果,都知道他要去了,这就省事了,活动安排(ACTION_MOVE和ACTION_UP)来了,秘书1直接通知秘书2(为什么不直接通知领导3呢,因为他闲领导3太丑,哈哈,开玩笑滴,领导绝对是英俊潇洒,风流倜傥……,是因为不够级别让自己去通知啊),秘书2收到通知,再直接下发给领导3 ,然后领导3就happy去了,所以说啊,这管理是很严滴,一级一级往下分发,你下级的事,上面都知道,要小心喽 ……

  2.自己不去,return false,唉,懒得去,向上级汇报,自己病了,秘书2一听,唉,没办法,这只有通知自家领导2了,叫醒领导2,问他去不去,领导2正好休息好,心情不错,大笑一挥,去,好,向上面汇报,秘书1的通知来了, 有人问这里还要不要秘书2过一遍呢,答案是否,因为秘书2只过滤一遍,就是决定要不要通知领导(看来领导必须跟小秘搞好关系啊,不然关键时刻给你来一下子,你就完蛋了),一旦领导收到通知,秘书就不管了,秘书干嘛去了,秘书打扮去了啊,晚上要陪领导啊,还不打扮的漂亮点,这不是给领导丢人么?

请看图

分析二

如果把LayoutView2的onInterceptTouchEVent返回true会有神马情况?

前面分析一样,这里只分析一点,既然领导2的小秘通知了领导,领导也决定去,那就没你领导3什么事了,领导3什么都收不到,网上说会收到ACTION_CANCEL,我这里没测到,我觉得应该是什么都收不到,因为ACTION_CACEL前提条件是你收到了ACTION_DOWN,并且在之后的时间,上级领导突然又要插手这件事了,(在onInterceptTouchEVent的ACTION_MOVE/UP的时候返回true,截断)这个时候,就会通知下级取消这次事件,什么时候会遇到这种情况呢,在listview滑动的时候,按住屏幕往上滑动的时候,如果用程序模拟的话,就是在上一级控件的onInterceptTouchEVent中ACTION_DOWN的时候返回false(向下级传递),然后在ACTION_UP的时候返回tue,截断后续消息,这种情况会收到ACTION_CANCEL

好吧,到此结束,该去洗澡了,关于具体的屏幕点击事件的处理机制以及流程在以后的博文中整理!谢谢!

最后附上源码地址 :     http://files.cnblogs.com/xiaoQLu/MotionEventTest.rar

android事件传递机制以及onInterceptTouchEvent()和onTouchEvent()详解二之小秘与领导的故事...相关推荐

  1. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  2. Android事件传递机制(转)

    Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作.所有这些都构成了Android中的事件响应.总的来说,所有的事件都 ...

  3. Android 事件传递机制总结

    Android 事件传递机制总结 Android View虽然不是四大组件,但是其重要程度堪比四大组件.初级工程师到中高级工程师,这些都是很重要的,因为事件分发机制面试也会经常被提及,如果我们能get ...

  4. android imageview 事件传递,Android 事件传递机制TextView,ImageView等没有默认clickable属性的View单独设置onTouch事件注意事项...

    本文讲解TextView,ImageView等没有默认clickable属性的View单独设置onTouch事件 Android 事件传递机制:Android 事件传递机制初涉 我们知道 Button ...

  5. android touch机制,细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)...

    本文背景:前些天用到了之前写的自定义图片文字复合控件,在给他设置监听时遇到了麻烦.虽然最后解决了问题,但发现在不重写LinearLayout的onInterceptTouchEvent时,子Image ...

  6. Android事件传递机制【Touch事件】

    Android中提供了ViewGroup.View.Activity三个等级的Touch事件处理.也就是说,这三个地方都有事件回调方法. 测试DEMO视图结构: <com .orgcent.ev ...

  7. Android事件传递机制详解

    总结 dispatchTouchEvent方法:分发点击事件 onInterceptTouchEvent方法:拦截事件(只存在于ViewGroup,View没有此方法), 在dispatchTouch ...

  8. android 事件传递机制

    有三个方法: dispatchTouchEvent onInterceptTouchEvent onTouchEvent 首先:A的dispatchTouchEvent-A的onInterceptTo ...

  9. android touch事件坐标原点,图解Android:Touch事件传递机制

    前言 Android事件管理机制是一名专业Android研发工程师必须要了解的核心知识之一,深入了解一下该机制无论对我们日常开发还是找工作,乃至于对我们的架构思想都有很大的帮助.Android中我们用 ...

最新文章

  1. iOS 之 tableView的复用、设计模式
  2. Union和Union All到底有什么区别
  3. jQuery UI 拖动(Draggable) - 延迟开始
  4. SQl 根据某列去重 partition by
  5. 00截断上传绕过_关于上传中的00截断分析
  6. 搭建DNS主、从服务实验
  7. 我们每个人都想在事业上获得成功,但做到的人往往凤毛麟角
  8. linux界面右键无效,在linuxtkin中运行GUI时,右键单击菜单消失得太快
  9. 国内完全免费的电子书籍下载
  10. 【第105期】游戏策划:应聘简历的附件那些事
  11. MPU6050数据分析
  12. 百度脑图制作的简单的个人介绍
  13. SaaS黑马杀出 亦群协作云平台发布
  14. Errors were encountered while processing
  15. 《指弹:Dream Catcher》
  16. 【未来简史】读书笔记
  17. 午夜与element-ui邂逅
  18. tensorflow XLA 笔记
  19. 计算图替代——一种DNN框架计算图优化方法
  20. 触摸按键PCB设计要点

热门文章

  1. 第九天学习Java的笔记(方法重载)
  2. Python IDLE 如何清屏
  3. Mathcad Prime 下载 安装 与 和谐教程
  4. C++ | C++实现高精度加法——数组加法(附源代码)
  5. 光流 | OpticalFlow博客资源
  6. -bash:XXX: command not found报错(云服务centos)
  7. linux系统实用脚本,常用linux系统命令及简单小脚本
  8. windows编程一日一练(3)
  9. docker 查看已安装容器_WIN7下安装Docker容器
  10. 【机器学习】信用卡欺诈检测|用启发式搜索优化XGBoost超参数