Android事件派发机制简析
来源:互联网 发布:苹果电脑怎样删除软件 编辑:程序博客网 时间:2024/06/01 09:44
参考:http://blog.csdn.net/yanbober/article/details/45887547
http://blog.csdn.net/yanbober/article/details/45912661
- Android控件的Listener事件触发顺序是先触发onTouch,其次onClick。
- 如果控件的onTouch返回true将会阻止事件继续传递,返回false事件会继续传递。
在View的触摸屏传递机制中通过分析dispatchTouchEvent方法源码我们会得出如下基本结论:
- 在Android中你只要触摸控件首先都会触发控件的dispatchTouchEvent方法
- 触摸控件(View)首先执行dispatchTouchEvent方法。
- 在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行)。
- 如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。
- 如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。
- 如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。
View的dispatchTouchEvent方法中调运的onTouchEvent方法
- onTouchEvent方法中会在ACTION_UP分支中触发onClick的监听。
- 当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action。通过设置一个View的触摸监听事件后(setOnTouchListener),对应的onTouch( )方法也是如此
类似Button这种控件都是View的子类,类似布局这种控件都是ViewGroup的子类,而ViewGroup又是View的子类
- Android事件派发是先传递到最顶级的ViewGroup,再由ViewGroup递归传递到View的。
- 在ViewGroup中可以通过onInterceptTouchEvent方法(这个方法也是ViewGroup独有的)对事件传递进行拦截,onInterceptTouchEvent方法返回true代表不允许事件继续向子View传递,返回false代表不对事件进行拦截,默认返回false。
- 子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。
ViewGroup(如LinearLayout)中的事件主要是针对是否分发到子View的,而View(如Button)中的事件主要是讨论View的事件是否要向下一级事件传递(如touch事件传递到click事件)。
0 0
- Android事件派发机制简析
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- android事件派发机制研究,有图有实例
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- Android源码分析-点击事件派发机制
- cocos2d-事件派发机制
- Android源码分析-对点击事件派发机制
- Android触摸屏事件派发机制详解与源码分析
- Java多线程2:Thread中的实例方法
- (Leetcode)Ugly Number
- 机器学习——(一)
- home键效果
- linux redis 集群
- Android事件派发机制简析
- [干货] 【译】Android 开发规范与应用
- Call Requires API level 11 (current min is 8) Android.App.Activity#onCreateView
- CentOS服务器防暴力破解
- Java多线程3:Thread中的静态方法
- Android 从源码看Handler消息机制
- 448. Find All Numbers Disappeared in an Array
- 二叉树算法应用案例
- URLEncoder和URLDecoder