PS:好久没有写博客了,项目正式开始启动了,但是怎么也打不起精神来...可能还是不适应放假留校...这下一年只能回家一次了...伤感...写篇博客舒坦下...

学习内容:

  Android中dispatchTouchEvent和OnInterceptTouchEvent和OnTouchEvent三个方法之间的联系...这三个方法研究了整整一个下午,也没有理解的特别的好...说实话,java的源代码我始终都没有看懂究竟是怎么个调用过程...不过还是把自己理解的结果写一下把...

  这三个方法是相互关联的,表示的是Android中触摸事件的分发过程...这个触摸事件一般设计到三个过程,DOWN按下操作,MOVE移动操作,UP抬起操作,有的时候MOVE操作可以没有...首先我们需要理解一个非常重要的问题就是Android如何对触摸事件进行捕获,分发,和响应的过程,没有了这个过程我们完全不知道这三个事件是怎么一回事...我简单的先放上一张图片..

  这张图片反映了完整的触摸事件发生,分发,以及响应的一个过程...我简单的阐述这个过程的实现:当我们按下屏幕出发ACTION_DOWN操作的时候,那么dispatchTouchEvent()方法就被启动了,这个方法通过调用OnInterceptTouchEvent来判断,本层的View是否进行拦截...如果进行拦截,那么这个ACTION_DOWN操作的响应只会在本层的View中进行响应..然后对ACTION_DOWN进行消费...如果ACTION_DOWN操作被消费,那么本层的View还会去响应ACTION_MOVE和ACTION_UP操作...如果没有进行消费,那么就会返回信息,并且不会执行ACTION_MOVE和ACTION_UP操作...估计大家看到这里的时候就会认为(这楼主写的什么玩意...)...其实我刚看的时候也是这样...

  我们拿一个实例来看...不上什么代码...这里上代码也不好理解...我们就拿我们手机里的滑屏幕操作来说...滑屏操作最熟悉不过了,但是我们大家往往没有注意到,我们的手机桌面上有很多应用图标...我们在短时间按住桌面图标然后滑动屏幕这个操作我们也能实现,只要不是长时间按着就可以实现屏幕滑动的效果,并没有由于桌面上的图标而受到影响..其实这个例子我们就很好理解了...在这里把事情交代清楚...(ACTION_DOWN:手按下屏幕...触发dispatchTouchEvent) ,(最外层的ViewGroup:主屏幕),(下一层ViewGroup:桌面图标)...然后我们的主屏幕调用OnInterceptTouchEvent()函数进行拦截...这里必须要拦截,只有主屏幕进行拦截操作,这样下一层的ViewGroup,也就是桌面图标才不会去对ACTION_DOWN进行响应操作...也就是说,通过拦截后,主屏幕ViewGroup层调用OnTouchEvent进行响应...这样下一层的ViewGroup,也就是桌面图标层就不会有响应操作...我再放两张图...

  结合这两张图,大家再理解一下,总结一下,只要某一层产生了拦截,那么ACTION_DOWN操作就不会再向子ViewGroup进行传递了...但是响应OnTouchEvent(),也就是这个方法,不一定在本层的ViewGroup进行响应...因为TouchEvent可以向上传递...再上一张图片...

  上面的图片就是原因,因为只有当本层的ViewGroup对ACTION_DOWN进行消费之后才不会向上进行传递,并且当被消费之后,才会去响应ACTION_MOVE和ACTION_UP操作...

总之:

  android中的Touch事件都是从ACTION_DOWN开始的:

  单手指操作:ACTION_DOWN---ACTION_MOVE----ACTION_UP

  多手指操作:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.

Android学习笔记之dispatchTouchEvent和OnInterceptTouchEvent和OnTouchEvent三个方法之间的联系...的更多相关文章

  1. Android 学习笔记之Volley开源框架解析(三)

      学习内容: 1.CacheDispatcher缓存请求调度... 2.Cache缓存数据的保存... 3.DiskBasedCache基于磁盘的缓存类实现方式...   前面说到使用Volley发 ...

  2. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  3. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  4. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  5. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  6. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  7. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  8. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  9. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

随机推荐

  1. 由1433端口入侵,浅谈sqlserver安全 (转)

    前几日笔者在家里的PC上安装了Windows7旗舰版的操作系统,顺便搭了sqlserver2008和vs2010的开发环境,本打算业余时 间可以方便开发.学习.可是不尽人意啊!用了不到两天,居然突然出 ...

  2. eclipse快捷键调试总结【转】

    http://www.cnblogs.com/yxnchinahlj/archive/2012/02/22/2363542.html (1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到 ...

  3. Codeforces Round #382 (Div. 2) D. Taxes 哥德巴赫猜想

    D. Taxes 题目链接 http://codeforces.com/contest/735/problem/D 题面 Mr. Funt now lives in a country with a ...

  4. 十进制转二进制and位运算符

    先给大家送个福利! ---------------简单口算-------------------------- 10 >>  1010   除2取余倒写 /* 十进制转二进制规则是:除二取 ...

  5. c# 小数取整

    向上取整 math.ceiling() = math.ceiling( math.ceiling( 向下取整 math.) = math. math. C#取整函数实例应用详解 C#取整函数的相关使用 ...

  6. 判断big endian和little endian的方法

    http://blog.sina.com.cn/s/blog_6ab0b9a80101awzr.html   不同体系的CPU在内存中的数据存储往往存在着差异.例如,Intel的x86系列处理器将低序 ...

  7. 【转载】怎样使用ZEMAX导出高质量的图像动画

    Zemax 导出高质量图片与动画 (2013-08-13 11:01:51) http://blog.sina.com.cn/s/blog_628dd2bc0101dycu.html 转载▼ How ...

  8. 同时大量PPPoE连接请求,攻击PPPoE服务器,导致的用户异常掉线故障分析

    前几天接一个客户电话,PPPoE下用户异常掉线,掉线后拨号困难 到达后,我首先查看PPPoE日志,发现一秒钟内有大量PADI包,浪费服务器的SESSION,同时让服务器无法处理其他用户的请求. 打开W ...

  9. android Studio NDK

    官方文档地址: https://developer.android.com/studio/projects/add-native-code.html#download-ndk 最近推出CMake方式集 ...

  10. Mac OS 下安装wget

    环境:  Mac OS X 10.9.4 1 下载源码 地址: http://ftp.gnu.org/gnu/wget/wget-1.9.tar.gz 2 解压安装 tar zxvf wget-1.9 ...