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事件处理--读书笔记的更多相关文章

  1. android开发读书笔记

    第九章心得: HAL ( Hardware Abstraction Layer,硬件抽象腔,〉是建立在Linux驱动之上的一套翻字库.这套程序 j率并不属于 Linux 内核, 而是属于 Linux ...

  2. 《第一行代码 android》 读书笔记:找出当前界面对应的Activity

    在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...

  3. Java核心技术卷一基础知识-第8章-事件处理-读书笔记

    第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...

  4. $《第一行代码:Android》读书笔记——第2章 Activity

    (一)创建活动 1.创建活动类 创建没有Activity的项目,发现src文件夹是空的,手动创建一个包com.jyj.demo1,在包中添加一个名为MainActivity的class,该MainAc ...

  5. $《第一行代码:Android》读书笔记——第1章 Android系统

    (一)Android系统架构 1.Linux内核层:各种底层驱动,如显示驱动.音频驱动.电源管理等. 2.系统运行库层:各种库支持,如3D绘图.浏览器内核.数据库等. 3.应用框架层:各种API,各种 ...

  6. $《第一行代码:Android》读书笔记——第3章 UI基础

    (一)Android常用控件及简单用法 1.如下图: 2.补充: (1)margin:外边距:padding:内边距. (2)gravity:子元素的位置:layout_gravity:子元素在父元素 ...

  7. $《第一行代码:Android》读书笔记——第5章 Broadcast

    (一)广播机制简介 1.Android广播的分类: 如图所示: 2.发送广播:使用Intent:接收广播:Broadcast Receiver. (二)接收系统广播 1.动态注册监听网络变化 示例程序 ...

  8. $《第一行代码:Android》读书笔记——第6章 数据持久化

    主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...

  9. $《第一行代码:Android》读书笔记——第8章 通知和手机多媒体

    本章主要介绍了通知.短信.调用摄像头和相册.播放多媒体文件等内容. (一)通知的用法 1.通知的基本用法 见如下代码(详细操作步骤在代码注释中): (1)先创建一个布局文件,其中只有一个名为“发送通知 ...

随机推荐

  1. Mysql插入数据的时候,中文乱码问题的解决

    如果在Mysql中插入数据的时候,没有特定指定编码,可能会产生一系列的问题,例如,如果用insert语句的时候,可能提示incorrect values,等...究其原因,实际上无非是要让数据库和表中 ...

  2. Hostapd

    Hostapd 一.基本概念 hostapd is an application used to setup your wireless interface as an access-point (m ...

  3. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  4. 项目开发中遇到的extjs常见问题

    事件触发机制 l 给某一个控件添加事件. obj.addEvents( {search : true }); l 给某一个事件添加处理函数 n 给一个对象或变量添加监听及对应得处理,可以在创建时,通过 ...

  5. iOS开发 设置状态栏样式

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:NO];

  6. zookeeper错误

    ZooKeeper JMX enabled by defaultUsing config: /data4/hadoop/zookeeper-3.4.8/bin/../conf/zoo.cfgError ...

  7. 华为面试题——约瑟夫问题的C++简单实现(循环链表)

    /*     author:jiangxin     Blog:http://blog.csdn.net/jiangxinnju     Function:method of Josephus que ...

  8. form表单控件

    $("select option[value='" + queryparams['vendor'] + "']").attr("selected&qu ...

  9. DispatcherServlet

    <servlet> <servlet-name>chapter2</servlet-name> <servlet-class>org.springfra ...

  10. echarts折线图--数据交互

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...