首页 > 代码库 > 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 ----------- 事件分发 机制 研究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。