安卓事件处理机制

当触摸屏幕时候,

--先调用Activity中的dispatchTouchEvent函数,分发事件,找到点击位置所在的第一个子控件viewgroup1,

--然后将事件传递个viewgroup1的dispatchTouchEvent函数,然后看viewgroup1的onInterceptTouchEvent()是否拦截,ture,拦截,不向下传递。false,拦截,向下传递,因为viewGroup下还包括子View,所以默认返回值为false,即不拦截此ACTION_DOWN事件。

--然后找到他的子控件viewgroup3,反复推断。

--假设前面都没有拦截的话,然后再找到button1的dispatchTouchEvent()函数。在底层做触摸事件的响应.

触摸事件的传递从上往下(隧道方式)传递。

隧道方式,即从根元素依次往下传递直到最内层子元素或在中间某一元素中因为某一条件停止传递。

事件的传递是从下往上(冒泡方式)传递。

事件传递到button1的onTouchEvent函数处理。默认返回ture。接着button1的dispatchTouchEvent返回true,再接着viewGroup的dispatchTouchEvent返回true,最后Activity的dispatchTouchEvent返回true。

注1:(view与viewGroup的DispatchTouchEvent函数):

Button1是view,而他的父控件们都是viewgroup,他们的dispatchTouchEvent()不一样.

ViewGroup的dispatchTouchEvent依据onInterceptTouchEvent() 返回值来做处理,返回ture,做触摸事件处理,返回false做分发事件处理.

View没有dispatchTouchEvent()函数,依据点击事件的回调或触摸事件的回调来处理.

注2:(找到子控件的过程)

找到子控件的过程跟事件分发过程一致。

推断手指是否落在父viewgroup矩形区域内。假设是遍历子节点,看落在子节点那个区域内。直到找到子view为止。

注3:

事件dispatchTouchEvent向下传递过程中返回的结果默认不是true,而是一个过程。

是找子控件的过程。

处理结果向上传递过程中dispatchTouchEvent默认返回false.

最后:总体流程分析

1. Android事件分发是先传递到ViewGroup。再由ViewGroup传递到View的。

2,在向下传递过程中。能够通过onInterceptTouchEvent对事件传递进行拦截,若返回ture的话不再向下传递,直接从该控件处理事件。

3。

2. 在ViewGroup中能够通过onInterceptTouchEvent方法对事件传递进行拦截,onInterceptTouchEvent方法返回true代表不同意事件继续向子View传递,返回false代表不正确事件进行拦截。默认返回false。

3,事件处理过程向上分发的时候,

Button的ontouch事件

//返回ture。不响应click事件

//返回false,响应click事件

//依据底层代码,不管返回ture还是false,仅仅要这种方法是可点击的,dispatchTouchEvent就返回true;

传递给viewGroup1的dispatchTouchEvent处理,假设将其返回值设置为false,则。分发事件终止。由自己来处理(此时button和viewGroup1都返回点击事件)。

假设viewGroup1的dispatchTouchEvent返回ture,就是向上分发,我不处理的意思。

仅仅有button的处理逻辑生效

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamluZnVsaW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

时间: 2024-11-13 08:41:36

安卓事件处理机制的相关文章

nagios 事件处理机制

接到zz的任务,实现自动化处理nagios某项报警 脑海里有个印象,这个功能之前线下做过实验 一.首先必须查看下nagios的官方文档,确认可行,以下是笔者整理的一些自认为有用的信息 1)了解命令的定义方法Writing Event Handler CommandsEvent handler commands will likely be shell or perl scripts, but they can be any type of executable that can run from

【Nginx-反向代理服务器】基础知识(一)之事件处理机制

反向代理服务器: 反向代理(ReverseProxy)方式是在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端. 正向代理服务器与反向代理服务器的区别: 正向代理: 用户A主动访问服务器B,但是用户A的所有请求都由代理服务器Z来处理,也就是在用户A访问服务器B时,会通过代理服务器Z 反向代理: 反向代理正好与正向代理相反,用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答(即用户A访问的是代理服务器

Android基础入门教程——3.2 基于回调的事件处理机制

Android基础入门教程--3.2 基于回调的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制--基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操作;那么基于回调的事件处理机制又是什么样的原理呢?好吧,还有一个问题:你知道 什么是方法回调吗?知道吗?相信很多朋友都是了解,但又说不出来吧!好了,带着这些疑问我们 对a

C#委托及事件处理机制浅析

事件可以理解为某个对象所发出的消息,以通知特定动作(行为)的发生或状态的改变.行为的发生可能是来自用户交互,如鼠标点击:也可能源自其它的程序逻辑.在这里,触发事件的对象被称为事件(消息)发出者(sender),捕获和响应事件的对象被称作事件接收者. 在事件(消息)通讯中,负责事件发起的类对象并不知道哪个对象或方法会接收和处理(handle)这一事件.这就需要一个中介者(类似指针处理的方式),在事件发起者与接收者之间建立关联.在.NET Framework中,定义了一个特殊的类型(delegate

android开发详解(六)--------------事件处理机制

1.工程目录 2.FireEvent.java package com.example.fireeevent; import java.util.EventObject; //着火事件类,绑定事件源 public class FireEvent extends EventObject { private Object eventSource; public FireEvent(Object source) { super(source); // TODO Auto-generated const

ActionScript的事件处理机制处理机制

ActionScript和JavaScript的事件处理机制处理机制几乎完全相同,所不同的主要是ActionScript的事件处理机制还提供了一个 事件对象. 在ActionScript中,所有的事件的起点都是一个通用的事件对象,其他事件通过继承该通用的事件对象添加其它的信息. 事件对象提供的信息一般都会包括: 事件来源 数据引用 事件的类型 下面是示例程序: <?xml version="1.0" encoding="utf-8"?> <s:Ap

Android的Touch事件处理机制

Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后. Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层. 首先说一下Touch事件处理的几条基本规则. 1.如果在某个层级没有处理ACTION_DOWN事件,那么该层就再也收不到后续的Touch事件了直到下一次ACTION_DOWN事件. 说明:a.某个层级没有处理某个事件指的是它以及它的子View都没有处理该事件. b.这条规则不适用于Activity层(它是顶

【转】Qt 事件处理机制 (下篇)

转自:http://mobile.51cto.com/symbian-272816.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分发.接受和处理事件. 继续我们上一篇文章继续介绍,Qt 事件处理机制 (上篇) 介绍了Qt框架的事件处理机制:事件的产生.分发.接受和处理,并以视窗系统鼠标点击QWidget为例,对代码进行了剖析,向大家分析了Qt框架如何通过Event Loop处理进入处理消息队列循环,如何一步一步委派给平台相关的

【转】解读Qt 事件处理机制(上篇)

[转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分发.接受和处理事件. 本篇来介绍Qt 事件处理机制 .深入了解事件处理系统对于每个学习Qt人来说非常重要,可以说,Qt是以事件驱动的UI工具集. 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制. 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent.