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

是 父容器 与 子控件 之间的关系。

时间: 2024-12-06 18:26:57

Android ----------- 事件分发 机制 研究的相关文章

浅谈Android 事件分发机制(一)

在上一篇文章中,浅谈Android 事件分发机制(一),简要分析了一下事件分发机制的原理,总结一下就是事件层层传递,直到被消费,原理看似简单,但是在实际使用过程中,场景各不相同,复杂程度也就因产品而异,这篇文章就通过给view加移动来模拟事件分发. 触摸事件 这里涉及到几个与手指触摸相关的常见事件: 坐标系对于单指触控移动来说,一次简单的交互流程是这样的:手指落下(ACTION_DOWN) -> 移动(ACTION_MOVE) -> 离开(ACTION_UP) 坐标系 Android坐标系以手

【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象

前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五)Android事件分发机制(上)Touch三个重要方法的处理逻辑][下文简称(五),请先阅读完(五)再阅读本文],我们通过示例和log来分析了Android的事件分发机制.这些,我们只是看到了现象,如果要进一步了解事件分发机制,这是不够的,我们还需要透过现象看本质,去研究研究源码.本文将从源码(基

Android事件分发机制详解:史上最全面、最易懂

前言 Android事件分发机制是每个Android开发者必须了解的基础知识 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化等等 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面.最清晰.最易懂的 本文秉着"结论先行.详细分析在后"的原则,即先让大家感性认识,再通过理性分析从而理解问题: 所以,请各位读者先记住结论,再往下继续看分析: 文章较长,阅读需要较长时间,建议收藏等充足时间再进行阅读 目

Android事件分发机制

转载请注明出处:http://blog.csdn.net/chziroy/article/details/44401615 要理解Android事件分发机制,首先得了解几个概念,也算是总结,如果暂时看不懂也无妨,本文会讲解这几个问题. 1,点击屏幕,首先事件的传递从Activity的dispatchTouchEvent()方法开始. 2,关于Android事件分发机制,相关方法的方法有三个:onTouchEvent(),dispatchTouchEvent(),还有onInterceptTouc

图解 Android 事件分发机制

首发原文:http://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548149&idx=1&sn=709149df682c7d3a6e453c9ef0626a1f&chksm=f1180e08c66f871eb2e7e39e057a5b090214fd71adcd98aa36b3d7fcecf77ad5d08138c50131#rd 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟

Android事件分发机制的学习

最近被Android事件分发机制折磨的很烦躁,网上各种博客资料看完觉得还是得自己写一篇,一方面加深理解,另一方面希望能帮助到也同样在学习相关知识的童鞋们. 话不多说,直接开整. 当用户的手指点击到屏幕,便是整个事件的开始. 首先获取到该事件的是view层的控制者Activity,具体怎么获得我们不得而知,在此也不追究,而继续我们的主题.Activity获得事件后便执行它自身的方法: public boolean dispatchTouchEvent(MotionEvent ev) { if (e

Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9097463 其实我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客开始,就零零散散在好多地方使用到了Android事件分发的知识.也有好多朋友问过我各种问题,比如:onTouch和onTouchEvent有什么区别,又该如何使用?为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?为什么图片轮播器里的图片使用Button而不用Ima

android 事件分发机制(图文详解)

在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少.废话不多说,总结一句:事件分发机制很重要. Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明,如果用心的

Android事件分发机制详解(1)----探究View的事件分发

探究View的事件分发 在Activity中,只有一个按钮,注册一个点击事件 [java] view plaincopy button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("TAG", "onClick execute"); } }); 如果在需要一个触摸事件 [java] view plaincopy button.setO