文档章节

android事件处理流程

 梦想家Peng
发布于 2016/03/04 10:10
字数 413
阅读 21
收藏 0

事件处理流程由以下3个方法构成:
1) dispatchTouchEvent
2) onInterceptTouchEvent
3) onTouchEvent

默认事件处理流程为 1 -> 2 -> 3;
当控件存在嵌套关系时,默认情况下,1和2是“隧道式”的处理方式,即从最外层控件开始,分别执行1、2,然后其直接内层控件执行1、2……,而3是“冒泡式”的处理方式,即从最内层控件开始,然后由其直接父级控件执行……
3的返回值是“消费型”的,一旦返回true,则表示已经完全消费,那么,原定后续处理(父级控件的)3的将不再被执行,如果返回false,则表示未消费,那么,原定后续处理3的将继续执行,直到某个控件的3返回true或者没有更父级的控件。例如Button的单击事件就是直接消费(在3中返回true)的,所以,当在屏幕上点击按钮时,将由按钮直接处理事件,而其各父级控件将无法处理事件。

事件的消费
--------------------------------
事件的消费表示“已经完全处理了当前事件”,通常事件的消费表现为方法的boolean类型返回值,如果返回true,则表示已消费,返回false则表示未消费。


比如三个控件嵌套,最后哪个控件响应事件,由上面三个函数决定:

    <cn.tedu.event.OutterRelativLayout
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="@android:color/holo_blue_light" >

        <cn.tedu.event.MidRelativLayout
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_centerInParent="true"
            android:background="@android:color/holo_green_dark" >

            <cn.tedu.event.InnerRelativLayout
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_centerInParent="true"
                android:background="@android:color/holo_orange_dark" >
            </cn.tedu.event.InnerRelativLayout>
        </cn.tedu.event.MidRelativLayout>
    </cn.tedu.event.OutterRelativLayout>


© 著作权归作者所有

共有 人打赏支持
上一篇: ViewPager
下一篇: android动画
粉丝 0
博文 34
码字总数 15605
作品 0
深圳
私信 提问
Android 机制篇 - 事件分发机制超详解(🔥🔥🔥🔥🔥🔥🔥🔥)

Android 虽然不是四大组件,但其并不比四大组件的地位低(涉及面的广度和深入甚至比四大组件还复杂🔥)。而View的核心知识点“事件分发机制”则是不少刚入门同学的拦路虎(1、项目中处处遇...

Pepsimaxin
07/12
0
0
Android中父View和子view的点击事件的执行过程

Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTIONDOWN->ACTIONMOV...

火云
2015/06/11
0
0
安卓自定义View进阶-事件分发机制原理

安卓自定义View进阶-事件分发机制原理 之前讲解了很多与View绘图相关的知识,你可以在 安卓自定义View教程目录 中查看到这些文章,如果你理解了这些文章,那么至少2D绘图部分不是难题了,大部...

猴亮屏
05/22
0
0
Android输入系统(一)输入事件传递流程和InputManagerService的诞生

本文首发于微信公众号「刘望舒」 原文链接 : Android输入系统的事件传递流程和IMS的诞生 相关文章 解析WMS系列 View体系系列 前言 很多同学可能会认为输入系统是不是和View的事件分发有些关联...

刘望舒
11/01
0
0
android应用开发简单理解

做了个应用,总结下对于android 应用的简单理解 从上图可以简单看出,主线程启动,这里把各种操作称为action,主要分为3部分: ui(视图绘制)、event(事件处理)和other(数据或网络等处理) 1.当...

blackylin
2013/06/18
0
2

没有更多内容

加载失败,请刷新页面

加载更多

3分钟总结Mybatis别名

1.系统内置别名: 把类型全小写(resultType/paramType) 2.给某个类起别名 2.1 alias=”自定义” <typeAliases> <typeAlias type="com.bjsxt.pojo.People" alias="peo"/> </typeAli......

KingFightingAn
昨天
1
0
JAVA设计模式之模板方法模式和建造者模式

一、前期回顾 上一篇《Java 设计模式之工厂方法模式与抽象工厂模式》介绍了三种工厂模式,分别是工厂方法模式,简单工厂方法模式,抽象工厂模式,文中详细根据实际场景介绍了三种模式的定义,...

木木匠
昨天
7
0
C中的宏的使用(宏嵌套/宏展开/可变参数宏)

基本原则: 在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC))pr...

SamXIAO
昨天
4
0
SpringBoot 整合异步调用方法

1. 在 SpringBoot 主类上使用 @EnableAsync 注解,开启异步调用功能 package com.codingos.springbootdemo;import org.springframework.boot.SpringApplication;import org.springfra......

北漂的我
昨天
3
0
0015-如何使用Sentry管理Hive外部表权限

1.文档编写目的 本文档主要讲述如何使用Sentry对Hive外部表权限管理,并基于以下假设: 1.操作系统版本:RedHat6.5 2.CM版本:CM 5.11.1 3.集群已启用Kerberos和Sentry 4.采用具有sudo权限的...

Hadoop实操
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部