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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android 完全退出app程序

    Android 完全退出app程序Android完全退出app程序(不保留历史打开app记录)finishAndRemoveTask();//该方法在APIlevel21之后添加。System.exit(0);android.os.Process.killProcess(android.os.Process.myPid());

    2022年7月17日
    14
  • h3c路由器远程管理_h3c无线路由器怎么设置

    h3c路由器远程管理_h3c无线路由器怎么设置H3C路由器telnet进去以后重启的命令是什么啊?在用户模式下输入,reboot建议在重启之前进行设备配置的保存。避免丢失最近的配置操作。保存设备配置命令为:在用户模式下输入,save输入以上两种命令时,均会自动弹出提示信息,要求管理员确认是否进行重启或保存配置操作,弹出提示信息后输入Y即可。Y代表确认(yes)。H3C路由交换机清除所有配置的命令是?H3C路由交换机清除所有配置的命令是:re…

    2022年10月17日
    0
  • hibernate executeUpdate和executeNativeUpdate

    hibernate executeUpdate和executeNativeUpdateexecuteUpdate用来执行HQL的更新或者删除语句。executeNativeUpdate用来执行SQL的更新或者删除语句session.createQuery(hql)session.createSqlQuery(sql)最终都是通过ResultSetReturnImpl的executeUpdate(PreparedStatementstatement)方法实现publi…

    2022年10月20日
    0
  • 深度学习—1.认识深度学习

    深度学习—1.认识深度学习

    2021年10月5日
    64
  • 随机梯度下降法介绍及其参数讲解「建议收藏」

    随机梯度下降法介绍及其参数讲解「建议收藏」随机梯度下降法算法介绍简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的地方。既然是选择一个方向下山,那么这个方向怎么选?每次该怎么走?先说选方向,在算法中是以随机方式给出的,这也是造成有时候走不到真正最低点的原因。如果选定了方向,以后每走一步,都是选择最陡的方向,直到最低点。总结起来就一句话:随机选择一个方向,然后每次…

    2022年7月19日
    31
  • 利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」

    利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」众所周知,WinForm具有快速开发的优点,但是美观方面一直被人诟病,一般美化都是采用第三方的组件来满足美化效果,这里我也利用Cskin组件来设计一个具有一定美感的登录界面,CSkin下载CSkin的使用你可以自行查看下载后的文档或者另行百度,这里就不介绍了,关于CSkin的美化登录界面简单介绍,主要是利用背景图片结合CSkin界面和控件的效果来实现的,如果你中别人的登录界面,你也可以截取别人的登录界面,然后用自己的控件覆盖人家的登录输入位置,覆盖别人的logo或者系统名称等,这也是一种技巧。

    2022年5月27日
    38

发表回复

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

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