您的位置:首页 > 移动开发 > Android开发

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

2014-10-18 19:45 155 查看
事件的分发机制:

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 事件的传递: 并不是 子类与父类的关系。

    是 父容器 与 子控件 之间的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: