android事件解析
来源:互联网 发布:诗人 知乎 编辑:程序博客网 时间:2024/05/16 08:21
1.Ontouch()事件判断手指按下、抬起、移动等事件。
onTouch是优先于onClick执行的,并且onTouch执行了两次,一次是ACTION_DOWN,一次是ACTION_UP(你还可能会有多次ACTION_MOVE的执行,如果你手抖了一下)。因此事件传递的顺序是先经过onTouch,再传递到onClick。
如果onTouch返回true,则onClick事件不执行,onTouch方法返回true就认为这个事件被onTouch消费掉了,因而不会再继续向下传递。
如果我们在onTouch方法里返回false,就会再去执行onTouchEvent(event)方法。
onTouchEvent(event)中调用onClick事件
触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法
onTouchEvent事件每次点击它的时候都会触发一系列的ACTION_DOWN,ACTION_MOVE,ACTION_UP等事件。这里需要注意,如果你在执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了。简单的说,就是当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发后一个action。
onTouch和onTouchEvent有什么区别,又该如何使用?
从源码中可以看出,这两个方法都是在View的dispatchTouchEvent中调用的,onTouch优先于onTouchEvent执行。如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行。
另外需要注意的是,onTouch能够得到执行需要两个前提条件,第一mOnTouchListener的值不能为空,第二当前点击的控件必须是enable的。因此如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。对于这一类控件,如果我们想要监听它的touch事件,就必须通过在该控件中重写onTouchEvent方法来实现。
事件顺序:
dispatchTouchEvent--->onTouch--->onTouchEvent--->onClick
2.ViewGroup就是一组View的集合,它包含很多的子View和子VewGroup,是Android中所有布局的父类或间接父类,像LinearLayout、RelativeLayout等都是继承自ViewGroup的。但ViewGroup实际上也是一个View,只不过比起View,它多了可以包含子View和定义布局参数的功能。
ViewGroup事件顺序:
dispatchTouchEvent--->onInterceptTouchEvent--->return true or false?--->
if(true){
调用ViewGroup的onTouchEvent--->onClick
}else{
调用孩子View的dispatchTouchEvent--->onTouch--->onTouchEvent--->onClick
}
1. Android事件分发是先传递到ViewGroup,再由ViewGroup传递到View的。
2. 在ViewGroup中可以通过onInterceptTouchEvent方法对事件传递进行拦截,onInterceptTouchEvent方法返回true代表不允许事件继续向子View传递,返回false代表不对事件进行拦截,默认返回false。
3. 子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。
- Android onTouch事件解析
- android touch事件解析
- android事件解析
- android touch事件解析
- Android onTouch事件解析
- Android传递事件解析
- Android onTouch事件解析
- Android 点击事件解析
- Android 事件传递机制解析
- android的Touch事件解析
- Android事件机制完全解析
- Android事件分发流程解析
- android事件总线EventBus解析
- Android事件传递机制解析
- Android 手势事件机制解析
- Android Touch事件全解析
- Android事件分发机制解析
- 解析 Android 事件传递机制
- POJ 2486--Apple Tree
- eclipse 无法运行main函数类的解决办法
- 快速获取zip的文件目录
- git学习笔记(1)-git基础
- 根据某一字段汇总求和
- android事件解析
- 第十六州项目二字幅串连接
- 找出N之内的所有完数
- 在CentOS 7上安装Oracle 11.2.0.3
- python安装第三方模块UnicodeDecodeError:'ascii' codec can't decode byte ···
- DEVICE_ATTR的使用
- 初探 iOS8 中的 Size Class
- Log4j配置文件解析以及加载自己的配置文件
- 建立一个二叉排序树,并计算其高度,是否为二叉平衡树