我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android触摸事件传递机制初识

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android触摸事件传递机制初识

前言

今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套ListView,都是上下滑动,这该如何解决呢,它解决的依据就是View事件的传递机制,所以开发者需要对View的事件传递机制有较深入的理解。

目录

  • Activity、View、ViewGroup三者关系
  • 触摸事件类型
  • 事件传递三个阶段
  • View事件传递机制
  • ViewGroup事件传递机制
  • 小结

Activity、View、ViewGroup三者关系

我们都知道Android中看到的页面很多是Activity组件,然后在Activity中嵌套控件,比如TextView、RelativeLayout布局等,其实这些控件的基类都是View这个抽象类,而ViewGroup也是View的子类,区别在于ViewGroup是可以当做其他子类的容器,一张关系图如下:

Android触摸事件传递机制初识

简单一句话,这些View控件的载体是Activity,Activity通过从DecorView开始进行绘制。

触摸事件类型

ACTION_DOWN:用户手指按下操作,往往也代表着一次触摸事件的开始。
ACTION_MOVE:用户手指在屏幕上移动,一般情况下的轻微移动都会触发一系列的移动事件。
ACTION_POINTER_DOWN:额外的手指按下操作。
ACTION_POINTER_UP:额外的手指的离开操作
ACTION_UP:用户手指离开屏幕的操作,一次抬起操作标志着一次触摸事件的结束。

在一次屏幕触摸操作中,ACTION_DOWN和ACTION_UP是必需的,ACTION_MOVE则是看情况而定,如果只是点击,那么检测到只有按下和抬起操作。

事件传递三个阶段

分发(Dispatch):事件的分发对应着dispatchTouchEvent方法,在Andorid系统中,所有的触摸事件都是通过这个方法来分发的。

java boolean dispatchTouchEvent (MotionEvent ev)

这个方法中,可以决定直接消费这个事件或者将事件继续分发给子视图处理。

拦截(Intercept):事件拦截对应着onInterceptTouchEvent方法,这个方法只有在ViewGroup及其子类中才存在,在View和Activity中是不存在的。

java boolean onInterceptTouchEvent (MotionEvent ev)

这个方法用来判断是否拦截某个事件,如果拦截了某个事件,那么在同一序列事件当中,那么这个方法不会被再次调用。

消费(Consume):事件消费对应着onTouchEvent方法。

java boolean onTouchEvent (MotionEvent event)

用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一事件序列中,当前View无法再接收到事件

在Android系统中,拥有事件传递处理能力的有三种:

Activity:拥有dispatchTouchEvent、onTouchEvent两个方法。
ViewGroup:拥有dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三个方法。
View:拥有dispatchTouchEvent、onTouchEvent两个方法。

View事件传递机制

这里说的View指的是除了ViewGroup之外的View控件,比如TextView、Button、CheckBox等,View控件本身就是最小的单位,不能作为其他View的容器,View拥有dispatchTouchEvent、onTouchEvent两个方法,所以这里就定义了一个继承TextView的类MyTextView,通过代码查看日志,看流程如何走。

public class MyTextView extends TextView { private static final String TAG = "MyTextView"; public MyTextView(Context context) {  super(context); } public MyTextView(Context context, AttributeSet attrs) {  super(context, attrs); } @Override public boolean dispatchTouchEvent(MotionEvent ev) {  switch (ev.getAction()) {   case MotionEvent.ACTION_DOWN:    Log.e(TAG, "dispatchTouchEvent ACTION_DOWN");    break;   case MotionEvent.ACTION_MOVE:    Log.e(TAG, "dispatchTouchEvent ACTION_MOVE");    break;   case MotionEvent.ACTION_UP:    Log.e(TAG, "dispatchTouchEvent ACTION_UP");    break;   case MotionEvent.ACTION_CANCEL:    Log.e(TAG, "dispatchTouchEvent ACTION_CANCEL");    break;   default:    break;  }  return super.dispatchTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()) {   case MotionEvent.ACTION_DOWN:    Log.e(TAG, "onTouchEvent ACTION_DOWN");    break;   case MotionEvent.ACTION_MOVE:    Log.e(TAG, "onTouchEvent ACTION_MOVE");    break;   case MotionEvent.ACTION_UP:    Log.e(TAG, "onTouchEvent ACTION_UP");    break;   case MotionEvent.ACTION_CANCEL:    Log.e(TAG, "onTouchEvent ACTION_CANCEL");    break;   default:    break;  }  return super.onTouchEvent(event); }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android触摸事件传递机制初识

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android触摸事件传递机制初识

前言今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套ListView,都是上下滑动,这该如何解决呢
2023-05-31

Android触摸事件传递图解

本博文讲解流程 TouchEvent相关事件简介 流程图分解讲解 总结与归纳一.TouchEvent相关事件简介 android TouchEvent相关事件有 1 dispatchTouchEvent 这个方法用来分发TouchEve
2022-06-06

Android事件传递机制

实验环境 OS X 10.9 Eclipse(ADT) Android源码版本:API Level 19(Android 4.4)Android事件构成 在Android中,事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还
2022-06-06

android点击事件传递机制是什么

Android中的点击事件传递机制是基于View的层次结构进行的。当用户触摸屏幕时,Android系统会将触摸事件传递给最上层的View,然后逐级向下传递,直到找到具体响应该事件的View。点击事件传递机制主要包括以下几个步骤:1. 触摸事
2023-08-18

详细分析Android中onTouch事件传递机制

onTach介绍 ontach是Android系统中整个事件机制的基础。Android中的其他事件,如onClick、onLongClick等都是以onTach为基础的。 onTach包括从手指按下到离开手机屏幕的整个过程,在微观形式上,具
2022-06-06

android点击事件传递机制怎么实现

Android的点击事件传递机制是通过View的dispatchTouchEvent方法和onTouchEvent方法实现的。首先,当用户触摸屏幕时,事件会被传递给Activity的dispatchTouchEvent方法。dispatch
2023-10-20

老生常谈android中的事件传递和处理机制

一直以来,都被android中的事件传递和处理机制深深的困扰!今天特意来好好的探讨一下。现在的感觉是,只要你理解到位,其实事件的 传递和处理机制并没有想象中的那么难。总之,不要自己打击自己,要相信自己能掌握这块知识。好了,下面是我今天的收获
2022-06-06

Android 事件触发机制的深入学习

Android 事件触发机制的深入学习最近在研究android的事件触发和传播机制,说来很惭愧,web下的事件太熟悉不过了,可在android中却很郁闷,常用的触摸事件都糊里糊涂的,在网上看了半天,也整理一份,供大家参考:public c
2023-05-31

PHP 框架中的事件处理和消息传递机制

php 框架中的事件处理和消息传递机制通过监听特定事件并执行回调函数实现组件间通信。消息传递机制则通过在消息队列中发送和接收消息实现异步处理。实战案例包括用户注册事件、订单处理事件和邮件发送消息,凸显了该机制在构建可扩展、可维护和响应迅速的
PHP 框架中的事件处理和消息传递机制
2024-05-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录