android触摸屏事件,Android Touch事件分析

android触摸屏事件,Android Touch事件分析AndroidTouch事件分析本文将分析Touch事件的传递。很多复杂的功能都需要深刻的处理Touch事件,例如侧边栏,例如图标的拖动换位。一,Touch事件的执行轨迹Down—>MoveàUP/Cancel二,Touch事件的分类Touch事件可分为两类:OnTouchEvent和onInterceptTouchEvent。消息传递的两种方式(Z轴方向)前者是正在执行touch事件的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Android Touch事件分析

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

一,Touch事件的执行轨迹

Down—>MoveàUP/Cancel

二,Touch事件的分类

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

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

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

f2b14e0154a1deaaaa5c8b1193cf63e6.png

三,Touch事件案例解析

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

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

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

92baba00f0ebde18b3802efe262593dc.png

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

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

Log如下:

359c6953771c74a5599c16afd8178841.png

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

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

Log如下:

23b45cae725cc5cd3935e0dafcd2cfc8.png

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

四,Source code

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197814.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTML登录界面的实现详解

    HTML登录界面的实现详解前言序锦前阵子参加学校的暑期实习,我作为项目负责人,除了进行统筹规划,整体运营以及进度安排等工作外呢,我还负责了前端模块,参与并编写了前端页面,在之前学过前端的基础上,本次参与前端的编写就比较容易了,我和另外一个伙伴我们选择了套用模板,在模板的基础上修改成我们想要的样子,这一点很重要,在这样一个很短的时间内,进行前端的编写,我们最好的选择就是进行模板的修改,但对于初学者来说,就算是…

    2022年5月11日
  • JavaScript Scripting.FileSystemObject FSO属性大全

    JavaScript Scripting.FileSystemObject FSO属性大全
    什么是FSO?
    FSO即FileSystemObject文件系统对象,是一种列表Windows磁盘目录和文件,对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用FSO网站的好处:直接读取目录下的文件和子目录,方便维护,如需要添加任何内容,将文件放在相应的目录下即可;FSO网站类似Windows操作界面,易于使用,会使用Windows就会使用FSO网站。
    试想一下,很方便的就可以将您硬盘中的文件和文件夹制作成网站,并且日后只要把内

    2022年7月14日
  • 手机修改域名服务器,手机修改域名服务器ip地址

    手机修改域名服务器,手机修改域名服务器ip地址手机修改域名服务器ip地址内容精选换一换安装依赖时,使用pip3.7.5installxxx命令安装相关软件时提示无法连接网络,且提示“Couldnotfindaversionthatsatisfiestherequirementxxx”,提示信息如下所示。没有配置pip源。配置pip源,配置方法如下:如果提示目录不存在,则执行如下命令创建:在.pip目录安装依赖时,使用p…

    2022年6月16日
  • 词向量算法「建议收藏」

    词向量算法「建议收藏」https://www.cnblogs.com/the-wolf-sky/articles/10192363.htmlhttps://blog.csdn.net/weixin_37947156/article/details/83146141基于神经网络的表示一般称为词向量、词嵌入(wordembdding)或分布式表示。神经网络的词向量和其他分布式类似,都基于分布式表达方式,核心依然是上…

    2022年6月11日
  • Could not connect to ‘ip‘ (port 22): Connection failed. liunx服务器ping不通[通俗易懂]

    Could not connect to ‘ip‘ (port 22): Connection failed. liunx服务器ping不通[通俗易懂]先检查网络,如果ping不通直接重启网络服务重启网络服务命令nmcli c reloadservice NetworkManager restart1、使用service脚本来调度网络服务,如:启动service network start关闭service network stop重启service network restart2、直接执行网络服务的管理脚本,如:启动/etc/init.d/network start关闭/etc/init.d/network stop

    2022年8月19日
  • log4j使用教程_log4js

    log4j使用教程_log4js简介Log4J是Apache的一个开源项目(官网http://jakarta.apache.org/log4j),通过在项目中使用Log4J,我们可以控制日志信息输出到控制台、文件、GUI组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。组成Log4J主要由Loggers(日志记录器)、Ap…

    2022年9月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号