Android事件分发机制完全解析,带你从源码的角度彻底理解(上)-转载郭霖
来源:互联网 发布:夜访吸血鬼电影知乎 编辑:程序博客网 时间:2024/06/05 02:27
转载请注明出处:http://blog.csdn.net/pi9nc/article/details/9281829
1.首先你需要知道一点,只要你触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法。那当我们去点击按钮的时候,就会去调用Button类里的dispatchTouchEvent方法,可是你会发现Button类里并没有这个方法,那么就到它的父类TextView里去找一找,你会发现TextView里也没有这个方法,那没办法了,只好继续在TextView的父类View里找一找,这个时候你终于在View里找到了这个方法
2.dispatchTouchEvetn()方法的源码
3.touch事件的层级传递。我们都知道如果给一个控件注册了touch事件,每次点击它的时候都会触发一系列的ACTION_DOWN,ACTION_MOVE,ACTION_UP等事件。这里需要注意,如果你在执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了。简单的说,就是当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发后一个action。
4.onTouch和onTouchEvent有什么区别,又该如何使用?
从源码中可以看出,这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行。
另外需要注意的是,onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。对于这一类控件,如果我们想要监听它的touch事件,就必须通过在该控件中重写onTouchEvent方法来实现。
5.在onTouchEvent方法中,如果控件是clickable的那么就会调用onclick()方法。所以说一个控件的执行先后顺序为:dispatchTouchEvent()------onTouch()-----onTouchEvent()-------onClick()
- 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)-转载郭霖
- 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- 命令行更新 android sdk
- 110 js ajax获取html元素并插入
- oracle ora-00904 标识符无效
- loadrunner中文乱码解决
- ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)-转载郭霖
- RSA加密(1.0)
- 黑马程序员——JAVA基础----集合框架(一)
- 对大文件的断点续传
- IOS之Quartz
- Jquery validationEngine使用的两种方式 客户端方重复提交
- 将.sql文件导入powerdesigner的实现方法详解
- JavaScript高级程序设计之DOM 扩展之选择符API第11.1讲
- Shell行操作:逐行读取,指定行输出,指定行删除等