首页 > 代码库 > Android ----------- 事件分发 机制 研究

Android ----------- 事件分发 机制 研究





事件的分发机制:


1 Android 中 对应屏幕 点击事件, 会进行 分发:
屏幕及 是由硬件完成物理坐标计算的。生成一个对应于 手机屏幕 左上角的 偏移量!
包含: rawX  rawY 
 
 
2 setContentView(R.layout.activity_main);
  
  当屏幕 发生 点击事件的时候: Android 会将 原始的点击坐标,
  发送给 windows 类。  Windows(系统级别的类) 手机的窗口, 负责 事件传递的老祖宗。
  有Android 系统提供的 并且只有 一个Window 的实例!
 
  Window 进行第一次的分发事件!
 
3 window 把事件 向自己的子容器 和 组件 传递。 字内容就是 Activity。


4   Activity 向自己的ContentView 传递。传递时 检查 ContentView 内容的
容器 或者 控件 是否进行事件的响应操作。




以上几点: 有android 系统 自动生成,不需要我们的参入!
基本的原理。


----------------------------------------------------------------


5   之后的操作 需要 我们(工程师)来进行处理:


6   查找对应的响应事件。 
根据物理坐标, 找到响应的  组件。  确定那个容器和组件。

7   当容器 找到了 含有处理事件的 控件和 容器 ,那么 传递进来的 X Y 就会发生问题。
坐标调整为 自身而言的  X  Y  坐标 用 GetX  和 GetY 获取!




8   分发,之内 检查是否 阻止?   如果阻止的  事件就不会向下分发 事件。
onInterceptTouchEvent  父容器 阻止  子组件的 事件分发,  返回true 子类就不会有事件分发,和 事件的响应!
直接从根部 解决!

onTouchListener()
返回true 就是不交给 父类!



如果 onTouchListener 先执行 onTouch() 
返回值 true    分发结束
返回False     控件自身的onTouchListener 才执行。




---------------------------------------------------------------


1 默认情况:   如何让发一个控件 能够接受 MOVE UP?
  Down 是最开始的,如果返回 true , 才会分发事件。  否则 不会!


2 Click 一般的情况下 都是有 View的 onTouchEvent 出发的。


3 长按  拖拽  以及更多的手势 事件。  可以有 手势识别器 来检测,进行事件的处理!


4 事件是否出触发,应该根据 当前控件的功能  来处理, 在需要使用父类的 功能的情况下,
应该调用父类的 事件处理机制 处理。

例如:  listView onTouchEvent()

5 事件的传递: 并不是 子类与父类的关系。
    是 父容器 与 子控件 之间的关系。














Android ----------- 事件分发 机制 研究