一直对view的事件处理流程迷迷糊糊,今天花了点时间写了个栗子把它弄明白了。

1.view的常用的事件分为:单击事件(onClick)、长按事件(onLongClick)、触摸事件(onTouch),另外view也有自己的onTouchEvent方法,这么多与事件相关的方法都由dispatchTouchEvent管理

2.根据面向对象思想,onTouch事件被封装成 MotionEvent 对象,常见的几个动作如图:

动作 简介
ACTION_DOWN 手指 初次接触到屏幕 时触发。
ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发。
ACTION_UP 手指 离开屏幕 时触发。
ACTION_CANCEL 事件 被上层拦截 时触发。

3.

  • 单击事件(onClickListener) 需要两个两个事件(ACTION_DOWN 和 ACTION_UP )才能触发,如果先分配给onClick判断,等它判断完,用户手指已经离开屏幕,黄花菜都凉了,定然造成 View 无法响应其他事件,应该最后调用。(最后)
  • 长按事件(onLongClickListener) 同理,也是需要长时间等待才能出结果,肯定不能排到前面,但因为不需要ACTION_UP,应该排在 onClick 前面。(onLongClickListener > onClickListener)
  • 触摸事件(onTouchListener) 如果用户注册了触摸事件,说明用户要自己处理触摸事件了,这个应该排在最前面。(最前)
  • View自身处理(onTouchEvent) 提供了一种默认的处理方式,如果用户已经处理好了,也就不需要了,所以应该排在 onClickListener 前面。( onTouchListener > onClickListener)

下面是我用写的栗子和打印出来的日志:手指长按不移动,再抬起

  

所以事件的调度顺序应该是 onTouchListener > onTouchEvent > onLongClickListener > onClickListener

当在ACTION_UP动作返回true的时候,会发现onClick没有执行(onClick的触发需要ACTION_DOWN 和ACTION_UP 两个动作配合完成),因为被onTouchListener消费掉了。而onLongClick执行是因为不需要 ACTION_UP 所以会在 ACTION_DOWN 之后就触发。

转载于:https://www.cnblogs.com/kelina2mark/p/5972838.html

View的事件处理流程相关推荐

  1. 从源码解析-Android中View的绘制流程及performTraversals方法

    谈谈Activity的setContentView是怎么加载XML视图的 谈谈Activity的View怎么与View绘制工具ViewRootImpl关联的 在前面两篇文章中分析了View是如何跟绘制 ...

  2. Launcher桌面点击长按拖动事件处理流程分析

    本文原创http://blog.csdn.net/yanbin1079415046,转载请注明出处. Android事件处理是android中很重要的一部分内容,而在ADW_Launcher中,and ...

  3. Android之View的绘制流程解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 自定义View在Android中占据着非常重要的地位,因此了解View的 ...

  4. View的Measure流程总结

    首先,Measure流程 是为了测量,并计算view的大小.宽mMeasuredWidth,高mMeasuredHeight,然后将宽高保存.为后续layout 和draw 提供数据支撑.而且meas ...

  5. Android O: View的绘制流程(二):测量

    在前一篇博客Android O: View的绘制流程(一): 创建和加载中,  我们分析了系统创建和加载View的过程,这部分内容完成了View绘制的前置工作. 本文开始分析View的测量的流程. 一 ...

  6. Android O: View的绘制流程(三):布局和绘制

    前一篇文章Android O: View的绘制流程(二):测量中,  我们分析了View的测量流程.  当View测量完毕后,就要开始进行布局和绘制相关的工作,  本篇文章就来分析下这部分流程. 一. ...

  7. Android O: View的绘制流程(一): 创建和加载

    从这篇博客开始,我们会用几篇文章,  基于Android O的代码,分析一下View的绘制流程. 在分析具体的绘制流程前,我们先来了解一下XML中定义的View,  如何被创建和加载. 一.setCo ...

  8. android的构成和工作流程,分析Android中View的工作流程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 在分析View的工作流程时,需要先分析一个很重要的类,MeasureSpec.这个类在View的测量(Measure)过 ...

  9. Android View的绘制流程简述 Android自定义View(一)

    1 Android的UI管理系统层级关系 如上图所示,这就是Android的UI管理系统的层级关系. 1.1 当一个应用启动的时候,会启动一个主Activity,然后Activity会创建出一个窗口系 ...

最新文章

  1. 20种看asp源码的方法及工具
  2. 面试官透露:候选人该这样展示值钱技能!
  3. vim 命令模式与输入模式切换
  4. 经典语录【摘自网路】
  5. MPLS转发过程中涉及的相关概念—Vecloud微云
  6. 【DirectX12】3.配置FBX_SDK
  7. ACM基础之取消cin与stdio的同步
  8. UNIX(多线程):17---异步任务提供者(Provider) 介绍
  9. 一起学习C语言:初谈指针(三)
  10. 【转】Android Studio安装配置学习教程指南 Gradle基础--不错
  11. js方法实现rgb颜色转换成16进制格式的代码的方法
  12. 自动对焦模式与af区域模式_什么是自动对焦,不同模式意味着什么?
  13. wakeonlangui 下载_远程开机软件(Wake On Lan)下载 v2.11.18 官方中文版 - 比克尔下载
  14. Kotlin学习:标准函数(Standard.kt),run()、with()...
  15. 2020最新项目经理面试题(持续更新)
  16. Ubuntu的shell脚本踩keng-unexpected operator
  17. Windows原版系统下载地址
  18. 金融衍生工具考前最后一练
  19. JSD-2204-Java语言基础-八大基本数据类型-Day02
  20. Qt学习1-对QT的初步了解(哔站视频学习记录)

热门文章

  1. DbNetSpell
  2. el表达式的转义字符。
  3. schedule调用相关整理
  4. LINUX 邮件服务器qmail 架设
  5. SOAP(Simple Object Access Protocol )简单对象访问协议
  6. Debouncing circuit(消抖电路)
  7. Docker下ETCD集群搭建
  8. WAMP安装curl扩展并发起https请求
  9. android SQLite使用SQLiteOpenHelper类对数据库进行操作
  10. FX Composer 2 中文版快速教程