2013-12-2817: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

更多相关文章

  1. Android(安卓)DiskLruCache完全解析,硬盘缓存的最佳方案
  2. Android自定义背景的设置方法
  3. android 注解简介三: 自定义注解实现视图绑定
  4. Android的Animation的onAnimationXXX/onAnimationXXX和Listener.
  5. Android(安卓)事件分发机制具体解释
  6. Unity与Android通信
  7. 第五章 以数据为中心—数据存取(4)
  8. JAVA设计模式之Template method
  9. android 图片旋转 反锯齿

随机推荐

  1. LBE 安全大师支持android 4.4注入分析
  2. android中动画效果编程详解
  3. ionic打包apk时报错No resource identifi
  4. Android 怎样获得手机信息(二)
  5. Android分辨率自适应
  6. Android中文API(146) —— Display
  7. Android(安卓)电话的反射调用机制实现静
  8. Android Activity切换动画详解及实例
  9. Android手机中获取手机号码和运营商信息
  10. Android(安卓)VelocityTracker的使用