| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Connor学Android - View事件分发规则 -> 正文阅读 |
|
[移动开发]Connor学Android - View事件分发规则 |
前言Hey,欢迎阅读Connor学Android系列,这个系列记录了我的Android原理知识学习、复盘过程,欢迎各位大佬阅读斧正!原创不易,转载请注明出处:http://t.csdn.cn/Lmbxd,话不多说我们马上开始! 1.方法介绍(1)public boolean dispatchTouchEvent(MotionEvent ev):用来进行事件的分发。如果事件能够传递给当前View,那么此方法一定会调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件 (2)public boolean onInterceptTouchEvent(MotionEvent ev):在上一个方法内调用,用来判断是否拦截某个事件,true表示拦截,false表示不会拦截。如果当前View拦截了某个事件,那么在同一个事件序列中,此方法不会被再次调用 (3)public boolean onTouchEvent(MotionEvent event):在dispatchTouchEvent方法中调用,用来处理点击事件,true表示消耗当前事件,false表示不消耗当前事件。如果不消耗,则在同一事件序列中,当前View无法再次接收到事件 下面的伪代码可以表现出三者的关系:
2.事件传递规则
当一个事件产生后,系统会先根据View树结构由上向下逐级分发事件,再由下向上处理事件,当其中一层拦截并处理事件后,该事件结束 由上向下分发事件顺序:Activity → Window → 顶级View(一般是ViewGroup) → 子层逐级分发事件 由下向上拦截事件顺序:顶级View的其中一个子View的onTouchEvent返回false,则调用上一层的onTouchEvent,逐级向上,若所有元素都不拦截、处理这个事件,最终由Activity的onTouchEvent调用处理 3.几点结论(1)同一事件序列一定是down —— move —— … —— move —— up (2)一般情况下,一个事件序列只能被一个View拦截并处理,且同一事件序列中的所有事件都直接交给它处理,且它的onInterceptTouchEvent不会再被调用。但也可以将本该自己处理的事件通过onTouchEvent强行传递给其他View处理 (3)View一旦开始处理事件序列,需要针对不同的事件处理并返回一个boolean值
(4)ViewGroup默认不拦截任何事件,即ViewGroup的onInterceptTouchEvent默认返回false (5)View没有onInterceptTouchEvent,一旦有事件传递给它,直接调用onTouchEvent (6)View的enable属性不影响onTouchEvent的默认返回值。只要它的clickable或longClickable有一个为true,onTouchEvent就返回true (7)onClick被调用的前提是View是clickable的,且收到了down、up事件 ent (8)事件的传递总是先父后子,但requestDisallowInterceptTouchEvent方法可以在子元素中干预父元素的事件分发过程,但ACTION_DOWN事件除外 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 3:48:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |