Android Touch事件分析

本文将分析Touch事件的传递。很多复杂的功能都需要深刻的处理Touch事件,例如侧边栏,例如图标的拖动换位。

一,Touch事件的执行轨迹

Down—>MoveàUP/Cancel

二,Touch事件的分类

Touch事件可分为两类:OnTouchEvent和 onInterceptTouchEvent。

消息传递的两种方式(Z轴方向)

前者是正在执行touch事件的方法,后者则是拦截touch事件的方法。OnTouchEvent()的传递是自上而下,OnInterceptTouchEvent是自下而上。

三,Touch事件案例解析

当然,听到这里可能还不是很清楚。下面将以demo的形式来说明。

显然,拦截touch事件的前提是有可拦截的touch事件,即存在子view,所以只有ViewGroup才有OnInterceptTouchEvent()方法。当最上的view(即TouchTextView)被touch到时(可能存在多层,demo以三层来分析)。从最下面开始判断是否需要拦截(Intercept),layout1—> layout2-->TouchTextView,如果不拦截,则

Case1:分别在Layout1, Layout2, TouchTextView中override OnTouchEvent()和OnInterceptTouchEvent(),不做任何处理。点击TouchTextView,log如下:

很明显,点击TextView之后,先从View的最底层判断要不要要拦截,以此向上处理,都不处理,那么TouchEvent事件最终交给TouchTextView处理。TouchTextView不处理,交给其父亲Layout2处理,Layout2不处理,交给Layout1处理。Layout1不处理,最终交给Activity处理。在拦截时,只通过ACTION_DOWN来判断,最终定下由谁处理TouchEvent时,才最终继续进行ACTION_MOVE, ACTION_UP.

Case2:在Layout1,ACTION_DOWN时拦截(设置返回值为true)。

Log如下:

显然Layout1将touch事件拦截,使用自己的TouchEvent()处理。但是ACTION_DOWN返回值为false,Layout已经在最下面,TouchEvent最终交给Activity处理。

Case3,如果不在ACTION_DOWN事件拦截,而在layout中的ACTION_MOVE事件拦截。

Log如下:

显然,在ACTION_MOVE中的拦截,对拦截没有任何作用,可以得出结论,ACTION_DOWN是用来确定某次touch时间到底如何处理。

四,Source code

https://github.com/mikewang0326/TouchEventDemo.git

android触摸屏事件,Android Touch事件分析相关推荐

  1. android控件的touch事件_Android touch 事件分发时序

    点击上方"蓝字"关注我们 1,touch 事件是如何从驱动层传递给 Framework 层的 InputManagerService: 2,WMS 是如何通过 ViewRooImp ...

  2. 手持设备点击响应速度,鼠标事件与touch事件的那些事

    前言 现在一直在做移动端的开发,这次将单页应用的网页内嵌入了app,于是老大反映了一个问题: app应用点击响应慢! 我开始不以为然,于是拿着网页版的试了试,好像确实有一定延迟,于是开始了研究,最后选 ...

  3. android调用js的touch事件吗,javascript-如何绑定Mousedown和Touchstart,但不同时响应两者? Android,JQuery...

    javascript-如何绑定Mousedown和Touchstart,但不同时响应两者? Android,JQuery 在还可以在移动设备上查看并且需要在touchstart和mousedown上绑 ...

  4. Android 模拟滑动 MotionEvent touch事件

    模拟android里touch事件的滑动,适用于recyclerview等. 通过发送MotionEvent来模拟touch事件,配合ValueAnimator控制滑动的时间,也可以加入差值器等,之所 ...

  5. android 触摸屏 滑动,android开发:触摸屏触摸事件MotionEvent演示实例

    触摸事件,可以包含多点触摸,也可以使用捏合手势缩放,并且放大图片; 多点触摸的实现: num =motionEvent.getPointerCount()//使用MotionEvent的此方法来获取当 ...

  6. js 如何将 mouse 事件转为touch事件

    可以使用以下方法将鼠标事件转换为触摸事件: 在 DOM 元素上绑定 touchstart 事件监听器,并在事件监听器中调用 preventDefault() 方法来阻止默认的触摸事件. element ...

  7. android控件的touch事件_聊聊Android嵌套滑动

    聊聊Android嵌套滑动 最近工作中遇到了需求是使用 Bottom-Sheet 交互的弹窗,使用了 design 包里面的 CoordinatorLayout 和 BottomSheetBehavi ...

  8. 以下哪些属于android控件的touch事件?_聊聊 Android 的 GUI 系统

    你长得辣么好看,我想着要更详细地了解你.今天,让我们一起来聊聊 Android 的 GUI 系统. 缘起 在2019年的 Google I/O 大会上,Jetpack 团队首次为大家介绍了 Jetpa ...

  9. android触摸屏idc,Android触摸屏IDC

    我正在努力在Android平台上校准触摸屏. 供应商0dfc和产品0001的USB单触式触摸屏与dmesg一起检查: <6>[ 4118.091541] input: USB Touchs ...

  10. android 触摸屏进程,Android 触摸屏TP

    关键词:android  电容屏 tp  ITO 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0平台:S5PV310(samsung exynos 4 ...

最新文章

  1. 正确理解python中二分查找
  2. Serverless 架构到底要不要服务器?
  3. 实战系列-使用Mybatis-Plus生成器生成代码
  4. 软件测试 学习之路 linux基础命令 (二)
  5. .NET下一种简单的调试诊断方法
  6. (转载)SQL基础-- 约束(CONSTRAINT)
  7. 深入浅出计算机组成原理
  8. niosii spi 外部_niosii 的SPI详解
  9. 三维图像的Dice系数计算
  10. Go2sky -- Golang用skywalking实现全链路追踪
  11. excel 文件过大 瘦身
  12. 5G业务测试方法与验证
  13. 路由器修改dns服务器,怎么重新设置路由器dns
  14. Photoshop制作倒影字
  15. cad拖动有残影_LCD 残影问题分析及常见解决办法
  16. android10.0(Q) root QCOM-SM6125 user版本打开root权限
  17. mysql 留存率_mysql查询用户留存语法(用户留存和用户留存率问题)
  18. Web阶段--Servlet基础知识点
  19. 阿里云服务器被入侵执行MoneroOcean(门罗币)挖矿脚本
  20. 摊上事儿的网易邮箱和安全圈的那些“防御机制”

热门文章

  1. linux之mysql客户端安装
  2. 智能手机性价比成为历史?涨价与减配或成主旋律
  3. 这份算法攻略,我拿到了5个大厂的offer
  4. 用手机连接电脑的360免费WiFi(电脑自带的无线网卡启动AP模式)
  5. 真正理解JS原型和原型链
  6. 解决vmware 15 pro安装win10黑屏的问题
  7. iphone5g信号测试软件,iPhone 12的5G信号测评曝光:测试速度为197Mbps
  8. 视频太大,教你如何压缩多段视频,瞬间多出好多内存
  9. [Python Gui]PySide6的Helloworld
  10. Oracle数据库修改账户密码