View事件传递分析
来源:互联网 发布:js二级联动省市代码 编辑:程序博客网 时间:2024/05/21 03:17
Android的事件都是由许多touch事件组成,touch的第一个状态肯定是ACTION_DOWN,表示按下了屏幕,之后的事件可以是:
ACTION_MOVE // 表示为移动手势
ACTION_UP // 表示为离开屏幕
ACTION_CANCEL // 表示为取消手势,不会由用户操作产生,由程序产生
一个ACTION_DOWN, n个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。
事件传递原则:
从底层View依次向上层View传递,过程就是一个接一个,某一个点后根据方法boolean的返回值判断是否要继续往下传递。在Android中,所有的事件都是从开始经过传递到完成事件的消费,这些方法的返回值就决定了某一事件是否是继续往下传,还是被拦截了,或是被消费了。
所有的操作事件首先必须执行的是按下操作(ACTIONDOWN),之后所有的操作都是以此作为前提,因为所有的事件操作都发生在触摸屏上,而在屏幕上与用户交互的就是各种各样的视图组件(View),在Android中,所有的视图都继承于View,另外通过各种布局组件(ViewGroup)来对View进行布局,ViewGroup也继承于View。所有的UI控件例如Button、TextView都是继承于View,而所有的布局控件如RelativeLayout、容器控件例如ListView都是继承于ViewGroup。所以,事件操作主要就是发生在View和ViewGroup之间,View和ViewGroup中主要有如下3个方法来对这些事件进行响应:
1、public boolean dispatchTouchEvent(MotionEvent event)2、 public boolean onTouchEvent(MotionEvent event)3、 public boolean onInterceptTouchEvent(MotionEvent event) (ViewGroup)
dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。
onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回true的时候表示拦截当前事件,不继续往下分发,交给自身的onTouchEvent进行处理。返回false则不拦截,继续往下传。这是ViewGroup特有的方法,因为ViewGroup中可能还有子View,而在Android中View中是不能再包含子View的。
onTouchEvent方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。
最上层View消耗ACTION_DOWN:
最上层View消耗ACTION_MOVE:
父View拦截MOVE:
父View拦截并消耗DOWN:
父View处理MOVE:
View的事件处理就分析到这,接下来会通过分析系统的Launcher源码来理解View事件传递与处理过程。
- View事件传递分析
- Android View事件传递机制-源码分析
- Android View事件传递机制-源码分析
- 简单分析View中的事件传递
- Android View事件传递与源码分析
- View的事件传递机制-实例分析(2)
- View事件传递
- View 事件传递
- View 事件传递
- View 事件传递
- View 事件传递
- View 事件传递
- View的事件传递
- View 事件传递
- Android View 事件传递
- View 事件传递
- view的事件传递
- View 事件传递
- VC中ComboBox使用详解
- 表单提交原理
- Python生成器:yield的使用
- freemarker传map<String,List<XXX>>类型,遍历list取值
- git强行换分支 gitpull问题解决
- View事件传递分析
- eclipse插件地址
- 强大的nth-child(n)伪类选择器玩法 企
- 理清关于iOS各个证书的关系以及作用
- GET方法传递中文参数乱码解决办法
- 查看和修改MySQL数据库表存储引擎
- SpringMVC和Struts2区别与比较总结
- c++代码实现图的DFS遍历
- JSON 之FastJson解析