慕工程0101907

让我们看一个视觉示例。在此处输入图片说明发生触摸事件时,首先会向每个人通知该事件,从活动开始,一直到顶部的视图。然后,每个人都有机会处理该事件,从顶部的视图(触摸区域中Z顺序最高的视图)开始,一直回到活动。因此,活动是第一个听到它的人,也是最后一个有机会处理它的人。在此处输入图片说明如果某些ViewGroup中要处理的触摸事件马上(而不是给别人下了线它的机会),那么它可以只返回true它onInterceptTouchEvent()。活动没有,onInterceptTouchEvent()但您可以覆盖dispatchTouchEvent()以执行相同的操作。如果View(或ViewGroup)具有OnTouchListener,则touch事件由处理OnTouchListener.onTouch()。否则由来处理onTouchEvent()。如果由于任何触摸事件而onTouchEvent()返回true,则处理在那里停止。线下没有其他人有机会。更详细的解释上图使事情比实际要简单一些。例如,在Activity和ViewGroup A(根布局)之间还有Window和DecorView。我把它们排除在上面是因为我们通常不必与它们进行交互。但是,我将在下面包括它们。下面的描述通过源代码跟踪触摸事件。您可以单击链接查看实际的源代码。(更新:源代码已更新,因此现在行号已关闭,但是单击链接仍将带您到正确的文件。只需搜索方法名称即可。)dispatchTouchEvent()通知活动有触摸事件。touch事件以形式传递MotionEvent,其中包含x,y坐标,时间,事件类型和其他信息。触摸事件发送到窗口的superDispatchTouchEvent()。Window是一个抽象类。实际的实现是PhoneWindow。获取通知的下一行是DecorView的superDispatchTouchEvent()。DecorView是处理状态栏,导航栏,内容区域等的FrameLayout元素。它实际上只是一个子类,它本身是的子类ViewGroup。收到通知的下一个通知(如果我错了,请纠正我)是您的活动的内容视图。在Android Studio的布局编辑器中创建布局时,这就是您在xml中设置为活动的根布局的内容。因此,无论您选择a RelativeLayout,a LinearLayout还是a ConstraintLayout,它们都是的子类ViewGroup。并且ViewGroup在中获得有关touch事件的通知dispatchTouchEvent()。这是我上图中的ViewGroupA。该ViewGroup会通知任何孩子有触摸事件,包括任何ViewGroup儿童。这是我上面的图中的ViewGroupB。沿途的任何地方,一个ViewGroup能短路通过返回通知处理true为onInterceptTouchEvent()。假设没有ViewGroup缩短通知,通知行的自然结尾是dispatchTouchEvent()调用View的get时。现在该开始处理事件了。如果存在OnTouchListener,则它有第一个机会使用来处理触摸事件onTouch()。否则,视图onTouchEvent()就可以处理它。现在,所有递归排列的ViewGroup都有机会以相同的方式处理touch事件View。虽然,我没有表明这上面的图中,一个ViewGroup是View子类,所以一切我已描述OnTouchListener.onTouch()和onTouchEvent()也适用于ViewGroups。最后,如果没有其他人想要它,则Activity也将获得使用来处理事件的最后机会onTouchEvent()。常问问题我什么时候需要覆盖dispatchTouchEvent()?如果要在任何视图获得机会之前捕获触摸事件,请在“活动”中覆盖它。对于ViewGroup(包括根视图),只需覆盖onInterceptTouchEvent()和即可onTouchEvent()。我什么时候需要覆盖onInterceptTouchEvent()?如果您只想监视即将出现的触摸通知,则可以在此处进行操作并返回false。但是,重写此方法的主要目的是让ViewGroup处理某种类型的触摸事件,同时让孩子处理另一种类型的事件。例如,a ScrollView这样做是为了处理滚动,同时让其子项处理诸如Button单击之类的操作。相反,如果子视图不想让其父视图窃取其触摸事件,则可以调用requestDisallowTouchIntercept()。触摸事件类型是什么?主要的是ACTION_DOWN-这是触摸事件的开始。你应该总是返回true的ACTION_DOWN事件onTouchEvent,如果你要处理的触摸事件。否则,您将不会再收到其他事件。ACTION_MOVE -当您在屏幕上移动手指时,会连续触发此事件。ACTION_UP -这是触摸事件的最后一个事件。亚军是ACTION_CANCEL。如果树上的ViewGroup决定拦截触摸事件,则调用此方法。您可以在此处查看其他类型的MotionEvent 。由于Android是多点触控,因此当其他手指(“指针”)触摸屏幕时也会触发事件。

android方向触摸事件,Android触摸事件如何传递?相关推荐

  1. android 方向控制界面,Android Studio屏幕方向以及UI界面状态的保存代码详解

    项目:orientation package com.example.orientation; import android.os.bundle; import android.util.log; i ...

  2. android方向触摸事件,Android触摸事件传递机制,这一篇就够了

    整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制. 这个触摸事件就是从外层往内层一层层的传递. 整个传递机制,分为3个步骤:分发,拦截,和消费. 1. 触摸事件的类 ...

  3. android 触摸 事件,Android触屏事件和MotionEvent详解

    Android屏幕操作 屏幕是用户和Android设备交互的主要媒介,屏幕分为触屏和非触屏.Android设备目前有四种类型:Android Phone,Android Tablet,Android ...

  4. Android 6种触摸事件,Android 的触摸事件详解及示例代码

    由于触摸(Touch)而触发的事件 Android的事件:onClick, onScroll,onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION_DOWN, ...

  5. android模拟全局按键,android命令行模拟输入事件(文字、按键、触摸等)

    前言 通过adb shell input可以模拟android各种输入事件,比如文字.按键.触摸等等. adb shell input Usage: input [] [...] The source ...

  6. Android Studio学习:安卓触摸事件

    (一)安卓触摸事件概述 1.触摸分类 (1)单点触摸 单点触控,只能识别和支持每次一个手指的触控.点击,若同时有两个以上的点被触碰,就不能做出正确反应.很多医院.图书馆等的大厅都有这种触控技术的电脑, ...

  7. Android面试必问之触摸事件传递机制

    Android面试必问之触摸事件传递机制 一.Activity的构成 二.触摸事件的类型 三.事件传递的三个阶段 Activity对点击事件的分发过程 五.View的事件分发机制 六.点击事件分发的传 ...

  8. android autolink识别错误,android - autolink窃取ontouch事件,从而反馈触摸列表视图行无效 - 堆栈内存溢出...

    我有一个listview . 并且行布局中包含很少的布局. 在行布局中,我有一个TextView ,我想在其上启用自动链接当我启用自动链接时,链接工作正常但我们点击列表行时得到的反馈不再有效. 在行布 ...

  9. android 实现冒泡动画,android 触摸事件冒泡动画效果

    原图魔法效果:(透明的有些看不清) PS之后加了背景色并放大后的效果 在屏幕中的效果(左上很小的那个,其他都是背景图): 中间很小的那个就是 先看动画实现代码explosion.xml(explosi ...

最新文章

  1. 『第27天』Sunos(二)
  2. poj3687Labeling Balls
  3. 神秘围棋AI“神之一手”:5秒一步令日本高手叹服
  4. 百度网盘javascript加速视频播放速度
  5. 一般处理程序制作的验证码
  6. React 18 RC 版本发布啦,生产环境用起来!
  7. 通过小程序给公众号传递消息_多输入现场消息传递应用程序概念
  8. sql server 模糊查询
  9. Tab选项卡界面(1)
  10. MySql按字段分组取最大值记录 [此博文包含图片]
  11. Nodejs在Debian和Ubuntu上安装
  12. 算法笔记_面试题_18.动态规划_模板及示例十几道(下)
  13. input框背景设置透明
  14. 如何创建自己的apt软件源
  15. IT行业未来发展前景如何?
  16. 常见股票代码开头说明大全
  17. 艾伟:ASP.NET 2.0的编译模型
  18. java-php-python-ssm药房管理系统计算机毕业设计
  19. Leetcode快速入门之第二节课: 使用双指针+区间法解决数组问题
  20. mosaic系列板卡,通用针脚与诺瓦塔OEM板卡天宝MB2、BD990及常见20pin、24pin、28pin底板轻松适配

热门文章

  1. 【MATLAB】用地图表白:绘制Bonne投影下的世界地图
  2. 基于深度学习的花卉检测与识别系统(YOLOv5清新界面版,Python代码)
  3. IESM项目实训四——Web Audio录音和字符串转拼音
  4. J2EE疑难解决实例
  5. 全网超详细!用户画像标签体系建设指南!
  6. php如何获取客户端请求ip地址的方法
  7. P4学习笔记(三)P4编程语言简介
  8. 《MySQL安装流程详解》及《MySQL安装一直失败,重新安装显示已安装》
  9. 常见的均值不等式的使用技巧
  10. 系统设计 - 短链接系统 short url