文档章节

android 事件传递

y
 yanglingui
发布于 2017/02/08 11:53
字数 713
阅读 16
收藏 0
点赞 0
评论 0

1.事件传递的分类

1>按键事件处理

     当按键的按下:  驱动层先使用的

2>触摸事件处理

    

2.点击按键的传递方向

 

当开始 按下某个按键 的时候 先是驱动层先知道的 然后依次向下传递

1)如果return false :  将 "事件" 不会经过Activity 也就是 (MainActivity的父类),而是一层一层的返   回给驱动层 .

2)如果return true : 就是防止 "事件" 继续传递而是拦截下来 只在MainActivity 中处理

3)如果return super.onKeyDown(keycode,event) 这就是交给了Activity处理 (注意acitivy里的代码是谷歌工程师写的 它也得需要判断是自己处理还是需要返回给系统) 如果你按的 是返回键的时候 就return true 自己处理 记录一下 待到up的时候 finish了 如果不是 return false;

一般应用在app应用程序中,双击退出

private long lastTime = -1;
    //按键按下
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.e(Tag,">>>>>> onKeyDown");
        if (keyCode == event.KEYCODE_BACK){
            if (System.currentTimeMillis()-lastTime>2000){
                Toast.makeText(this,"在按一次退出",Toast.LENGTH_LONG).show();
                lastTime = System.currentTimeMillis();
            }else{
                finish();
            }
        }
        return true;
    }

 

3.长按事件是什么时候发生的呢?

长按事件是在activity中捕获的 , 所以在按下的时候必须返回super的方法,

当计数2次的时候才会调用onkeyLongPress()

event.startTracking();
return true;
onKeyLongPress(int keyCode, KeyEvent event)

如果只记录1次 当调用up的时候就会finish();

    4.触摸事件主要有几种形式?

1) 1>down   2>move  3>up  4>pointer_down  多指

2)事件也是从上到下逐层传递的

3)第一个接受到 "事件" 的是 "省长" 的 "秘书" 它有个行为: onInterceptTouch() 拦截

     有2种结果

return true :拦截 给 "省长" 处理   onTouch()

return false : 不拦截 交给下级"市长"的"秘书" 

4)"市长"的"秘书"  它有个行为: onInterceptTouch() 拦截

     有2种结果

return true : 拦截 给 "市长" 处理 onTouch()

return false: 不拦截 交给  "农民"(最低层的是没有"秘书"的)

5) "农民" onTouch() 处理

     返回2种结果

return false : "农民" 处理不了 -->把"事件"传递给"市长"

return true : 自己处理了

6)"市长" onTouch() 处理

    返回2种结果

return false : " 市长 " 处理不了 -->把"事件"传递给"省长"

return true : 自己处理了

7)"省长"onTouch() 处理

    返回2种结果

return false : " 省长长 " 处理不了 -->把"事件"传递给"系统"

return true : 自己处理了

8)触摸事件在默认的情况下是不需要拦截的

9)如果"农民" 不能把事件处理了 那么以后所有的所有"类型"的"事件"都不会交给"农民".

© 著作权归作者所有

共有 人打赏支持
y
粉丝 1
博文 123
码字总数 18154
作品 0
海淀
监听android:drawableLeft和android:drawableRight点击事件

监听android:drawableLeft和android:drawableRight点击事件 Android官方没有提供对android:drawableLeft和android:drawableRight点击事件的监听,但有些情况下,如下面的搜索栏, 需要在用户...

zhangphil ⋅ 04/17 ⋅ 0

安卓自定义View进阶-事件分发机制原理

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

猴亮屏 ⋅ 05/22 ⋅ 0

10分钟了解Android的事件分发

什么是事件分发? 大家知道Android中的视图是由一个个View嵌套构成的层级视图,即一个View里包含有子View,而这个子View里面又可以再添加View。当用户触摸屏幕产生一系列事件时,事件会由高到...

codeGoogle ⋅ 05/21 ⋅ 0

Android dispatchTouchEvent检测多点触摸事件是否落入在某一个View区域内

Android dispatchTouchEvent检测多点触摸事件是否落入在某一个View区域内 检测发生在Android设备屏幕上到的点击事件是否发生在某一个View的区域内,重点方法是touchEventInView,该方法进行具...

zhangphil ⋅ 04/24 ⋅ 0

Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

Design Patterns in Android:责任链模式

前言 非常抱歉,本系列博客长达半年没更新了,今日偶得灵感,更新一波《设计模式Android篇:责任链模式》。点击此处查看《Design Patterns in Android》系列其他文章。 本文原创作者MichaelX。...

MichaelX ⋅ 05/14 ⋅ 0

App打开微信小程序并传递参数

在App中打开小程序的功能发布有一段时间了,网上关于这个的新闻很多,但是技术资料并不多,我们有项目需要尝试这种方式,特意试了一下,发现还是有一些坑,分享给大家。 首先微信官方文档在微...

voxer ⋅ 06/12 ⋅ 0

Android 平台上轻量级的组件间通信框架 - Andromeda

Andromeda是爱奇艺开源的一个Android平台上轻量级的组件间通信框架,主要特征如下: 不需要开发者进行bindService操作,即可实现不同进程的任意两个组件间的IPC通信; 即使不在同一进程,也可同...

匿名 ⋅ 04/20 ⋅ 0

Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

前言 ,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 如此受欢迎的原...

Carson_Ho ⋅ 05/31 ⋅ 0

Android 5.1 Phone 挂断电话流程分析

写在前面的话 本文主要分析Android挂断电话的流程,研究的代码是Android 5.1的,以CDMA为例,GSM同理。 挂断电话主要分两种情况: } } Instructs this {@code Call} to disconnect. Instruc...

linyongan ⋅ 2015/08/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 21分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 35分钟前 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 47分钟前 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部