事件传递之一(基本概念)

来源:互联网 发布:pc助手91苹果优化软件 编辑:程序博客网 时间:2024/05/22 08:23

Android事件传递机制之一

      所谓事件传递是指在Android应用程序开发中,当有多个View叠加在同一个区域内,如果按下View所在的区域,按下的Down、Move,Up事件将如何进行传递的过程。

      假设一个ViewGroup里面包含了一个View,当用户按下View时,ViewGroup和View有哪些方法会触发呢。

 在了了解这些事件传递之前,我们先来了解一下几个方法的概念:

 1. dispatchTouchEvent:此方法只有继承ViewGroup的类才有,是指向childView分发事件的函数,即当手按下了View(或者ViewGroup)的位置,都会通过ViewGroup的dispatchTouchEvent事件,也就是它是所有View事件获取到之前触发,所有childView的事件都是通过dispatchTouchevent分发的。

 2. onInterceptTouchEvent:此方法只有继承ViewGroup的类才有,在dipatchTouchEvent分发后,就会被onInterceptTouchEvent所捕获,此方法起到一个拦截事件的作用,

    如果此方法return true,则表示不会再继续处理后续的事件。例如当onInterecptTouchEvent的Down的时候返回了true,则事件将不会继续传递给子View的onTouchEvent了,

   而是将事件传给当前ViewGroup的onTouchEvent进行处理

3.onTouchEvent:: 此方法不论是ViewGroup,还是View都有此都有,因为不论是ViewGroup还是View都是View的子类,所以onTouchEvent是View的函数。


以下举一个具体的实例来,描述事件传递过程

假设一个LinearLayout里面包含了一个TextView,当用户点击TextView中,事件将是如何传递的(为了描述方便,分别使用L1,T1)

1.默认情况下按如下顺序传递事件

   L1的dispatchTouchEvent的Down  -> L1的onInterecptTouchEvent的Down  ->T1的onTouchEvent的Down,默认情况下都是这个传递顺序

  1.        假如 T1的onTouchEvent的Down  return false了,则事件到此消失,不再继续传递下去 
  2.        假如T1的onTouchEvent的Down  return true 了, 则事件将会被传递到L1的onTouchEvent中,于是事件便有了如下流程
  3.        L1的dispatchTouchEvent的Down  -> L1的onInterecptTouchEvent的Down  ->T1的onTouchEvent的Down  ->L1的onTouchEvent的Down

2.于是我们可以得出如下结论

  1. 如果child view的onTouchEvent返回true,则Down事件将不再继续往下传递,如果child view的onTouchEvent返回的是false,则Down继续传递给childview 的parent的onTouchEvent
  2. Up事件不会走Down事件的onTouchEvent传递过程,谁处理了OnTouchEvent的Down事件并且返回了true(则事件不再继续传递下去),谁就处理Up事件,所以如果Down事件传递到了最顶级的Parentview,而最顶级的Parent view的onTouchEvent返回了false,则程序将丢失Up事件。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脑垂体瘤是什么引起的 腰痛是什么原因引起的 坐骨神经痛怎么引起的 传染性软疣怎么引起的 左背痛是什么原因引起的 脑供血不足是怎么引起的 手臂发麻是什么原因引起的 小腿浮肿是什么原因引起的 腰椎管狭窄怎么引起的 脚后跟疼是什么原因引起的 腿痛有哪些原因引起 末梢神经炎怎么引起的 腿浮肿是什么原因引起的 血糖高是什么原因引起的 腰椎滑脱是什么引起的 坐骨神经痛是怎么引起的 肾功能不全怎么引起的 腰困是什么原因引起的 腰肌劳损是怎么引起的 泡疹是什么原因引起的 嘴唇疱疹是怎么引起的 肾功能衰竭是怎么引起的 带状疱疹是什么引起 坐骨神经痛是怎样引起的 病毒性软疣怎么引起的 坐骨神经疼是什么引起的 坐骨神经是怎么引起的 腰椎管狭窄是什么引起的 病毒性疱疹怎么引起的 衣原体感染怎么引起的 颈椎痛是什么原因引起的 腰部带状疱疹是怎么引起的 妇科囊肿是什么引起的 胆囊息肉是什么引起的 阴毛囊炎是怎么引起的 急性咽炎是什么引起的 面部神经炎怎么引起的 小孩脑瘫是什么引起的 脑动脉硬化是怎么引起的 西安引镇 引镇