博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
View的事件处理流程
阅读量:5134 次
发布时间:2019-06-13

本文共 1100 字,大约阅读时间需要 3 分钟。

一直对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

你可能感兴趣的文章
由级别和性格特征将程序员分类 ---看看你属于哪一种
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
对我来说,只有一件事情是重要的
查看>>
完整的Socket代码
查看>>
PE知识复习之PE的导入表
查看>>
POJ 3280 Cheapest Palindrome
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
Objective-C非正式协议与正式协议
查看>>
Windows核心编程学习九:利用内核对象进行线程同步
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
JavaScript事件冒泡简介及应用
查看>>
SPOJ DQUERY D-query(主席树 区间不同数个数)
查看>>
八 Civil3d常用显示样式的编辑与创建 ----点标签样式2
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
生产阶段Webpack打包【基础打包】
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
查看>>
高德地图 android api 实现自动定位
查看>>