Android事件处理--读书笔记
2013-12-28 17:57:17
1. Android提供了两种方式的事件处理:基于回调和基于监听的事件处理;
1.1 对基于监听的事件处理而言,主要做法是为Android界面组件绑定特定的事件监听器;
1.2 对基于回调的事件处理而言,主要是重写Android组件特定的回调方法,或者重写Actvity的回调方法;
一般来说,基于回调的事件可用于处理一些具有通用性的事件,但对于某些特定的事件,只能采用基于监听的事件处理;
2. 基于监听的事件处理
2.1 处理模型:EventSource,Event 和Event Listener。
2.2 事件处理机制是一种委派式事件处理方式:普通组件(事件源)将整个事件处理委托个特定的对象(事件监听器),当该事件源发生指定的事件时,就通知所委派的事件监听器来处理。
2.3 使用规则:确定事件源,创建合适的事件监听器,注册。
2.4 当外部动作在Android组件上进行操作时,系统会自动生成事件对象,同时作为参数被传递给注册到事件源上的事件监听器。
3. 基于回调的事件处理
3.1 对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,当用户在GUI组件上激发某个事件时,组件自己特定的方法将会自动处理该事件。
3.2 基于回调的事件传播:所有基于回调的事件处理方法都有一个boolean类型的返回值,用于标识该处理方法是否能完全处理该事件。
3.3 如果返回ture,表示该处理方法已完全处理该事件,不会传播出去,false反之。
3.4 比较典型的是继承View来重写他的回调方法以实现我们的目的。
4. 关于触摸事件的分发及处理
4.1 onInterceptTouchEvent(MotionEvent ev),只有继承自ViewGroup的类才会有这个方法,
所以像TextView,ImageView等都是没有这个方法的,这个方法类似于小秘书的角色,负责拦截过滤事件,
也就是说当前类是否要处理收到的Touch event取决于这个方法的过滤,return true表示当前View要处理,
系统会启动onTouchEvent()方法,并且以后所有的事件都会直接来找这个View,当然,如果父View中途插手,那另当别论,
return false 表示自己不处理,系统会继续向下(子View)分发事件;
4.2 如果onTouchEvent()不处理,直接返回false,那么交给父View去处理,直到根View,如果还没人处理,那这个事件就消失了;
4.3 如果onTouchEvent()处理,那么将收到的Touch Event分解为具体的ACTION_DOWN, ACTION_MOVE,ACTION_UP等事件予以处理;
4.4 dispatchTouchEvent()负责分发TouchEvent,是三个方法中最先执行的,最好返回super.dispatchTouchEvent(ev);
每一级View的该方法都会执行,然后执行onInterceptTouchEvent(),如果有的话,最后根据onInterceptTouchEvent的返回值,来决定是否要启动onTouchEvent。
更多详细:http://www.cnblogs.com/xiaoQLu/archive/2012/04/28/2474443.html
Android事件处理--读书笔记的更多相关文章
- android开发读书笔记
第九章心得: HAL ( Hardware Abstraction Layer,硬件抽象腔,〉是建立在Linux驱动之上的一套翻字库.这套程序 j率并不属于 Linux 内核, 而是属于 Linux ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- Java核心技术卷一基础知识-第8章-事件处理-读书笔记
第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...
- $《第一行代码:Android》读书笔记——第2章 Activity
(一)创建活动 1.创建活动类 创建没有Activity的项目,发现src文件夹是空的,手动创建一个包com.jyj.demo1,在包中添加一个名为MainActivity的class,该MainAc ...
- $《第一行代码:Android》读书笔记——第1章 Android系统
(一)Android系统架构 1.Linux内核层:各种底层驱动,如显示驱动.音频驱动.电源管理等. 2.系统运行库层:各种库支持,如3D绘图.浏览器内核.数据库等. 3.应用框架层:各种API,各种 ...
- $《第一行代码:Android》读书笔记——第3章 UI基础
(一)Android常用控件及简单用法 1.如下图: 2.补充: (1)margin:外边距:padding:内边距. (2)gravity:子元素的位置:layout_gravity:子元素在父元素 ...
- $《第一行代码:Android》读书笔记——第5章 Broadcast
(一)广播机制简介 1.Android广播的分类: 如图所示: 2.发送广播:使用Intent:接收广播:Broadcast Receiver. (二)接收系统广播 1.动态注册监听网络变化 示例程序 ...
- $《第一行代码:Android》读书笔记——第6章 数据持久化
主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...
- $《第一行代码:Android》读书笔记——第8章 通知和手机多媒体
本章主要介绍了通知.短信.调用摄像头和相册.播放多媒体文件等内容. (一)通知的用法 1.通知的基本用法 见如下代码(详细操作步骤在代码注释中): (1)先创建一个布局文件,其中只有一个名为“发送通知 ...
随机推荐
- 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...
- 转载:最大子段和问题(Maximum Interval Sum)
一.问题描述 给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和. 例如(-2,11,- ...
- 自定义MVC Html
自定义ASP.NET MVC Html辅助方法 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我 ...
- 实体类实现Parcelable(包含boolean类型)
实体类实现Parcelable接口需要实现方法: public ExtSignClockEntity(Parcel in) { timeMess = in.readString(); repeatMe ...
- (转)ConcurrentHashMap解析
原文地址:http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/ ConcurrentHashMap 的结构分析 为了 ...
- 让你的linux操作系统更加安全【转】
BIOS安全 记着要在BIOS设置中设定一个BIOS密码,不接收软盘启动.这样可以阻止不怀好意的人用专门的启动盘启动你的Linux系统,并避免别人更改BIOS设置,如更改软盘启动设置或不弹出密码框直接 ...
- libsvm-3.21使用文档
Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. (可用于分 ...
- 20145218 《Java程序设计》第03次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:敏捷开发与XP实践 一.实验内容 XP基础 XP核心实践 相 ...
- 20145218 《Java程序设计》第二周学习总结
Java中的注释格式 单行注释 //注释文字 多行注释 /注释文字/ 文档注释 /**注释文字*/ 注释不仅仅是对代码进行解释,在上一篇博客中也写过,注释也可以用来检查程序中的错误,可以说是一个小窍门 ...
- Ubuntu 下 Neo4j单机安装和集群环境安装
1. Neo4j简介 Neo4j是一个用Java实现的.高性能的.NoSQL图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模.Neo4j完全兼容A ...