android触摸屏事件,Android Touch事件分析
大家好,又见面了,我是你们的朋友全栈君。
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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197814.html原文链接:https://javaforall.cn
相关文章
- 前NOKIA员工推Sailfish系统 兼容Android
- android studio不能输入中文_Android模拟器
- android onresume方法,非静态方法’onResume’Android Studio
- android中的加密算法,Android中加密算法[通俗易懂]
- android+制作开机动画,Android 开机动画制作详解
- android移动点餐系统内容和要求,基于Android云计算的移动点餐系统
- android开发笔记之 Android代码混淆打包
- Android 中屏幕点击事件的实现Android onTouchEvent, onClick及onLongClick的调用机制
- Android中的shell循环命令
- Android n_android 反编译
- android应用程序_chrome Android
- Android的TabLayout未铺满如何解决
- 【Android 应用开发】 FastJson 使用详解
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
- 【Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )
- 【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )
- 【错误记录】Android Studio 编译报错 ( Could not resolve com.android.tools.build:gradle:7.4.2. )
- Android系统的详解手机开发
- [android] 看博客学习Android常见的几种RuntimeException详解手机开发
- android 巧用finish方法详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- android向前兼容和向后兼容详解手机开发
- 谷歌:已 Root 的设备不能使用 Android Pay
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Android调用系统的发邮件功能的小例子