IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android事件分发的注意问题 -> 正文阅读

[移动开发]Android事件分发的注意问题

在这里插入图片描述

dispatchTouchEvent

只有返回super的情况下才会向下分发,分发的情况为:

Activity调用viewGroup的dispatchTouchEvent;

viewGroup 会调用自身的onInterceptTouchEvent();

然后再调用view的dispatchTouchEvent();

最后view 会调用onTouchEvent();

在这每个阶段,如果返回了true,直接消费掉,事件没有任何控件处理,认为这个事件是个费事件;
如果返回false,这个事件不再向下分发,而是调用父控件的onTouchEvent()方法,注意Acitvity会直接消费掉;

onInterceptTouchEvent

这个方法只有ViewGroup中含有,返回true拦截事件交给自身的onTouchEvent方法处理(一定要看注意第三条)
返回false和super会分发给子view的dispatchTouchEvent();

onTouchEvent();

返回super和false会调用父View的onTouchEvent方法,
返回true代表消费该事件

注意:

  1. 每一次touch产生的action事件,如果down事件在onTouchEvent()返回false,那么系统认为当前View不关心这一次的touch事件,此时这个action会传向父级,调用父级View的onTouchEvent。
    如果这个事件没有任何控件进行处理,那么这一次的touch事件之后发出的任何action(move up),该View都不会再接受,onTouchEvent在这一次的touch产生的action事件再也不会触发;但是如果我们对acition事件在dispatchTouchEvent方法消费了,那么后续的action事件仍能继续传递。只要走了onTouchEvent()并且返回了false那么后续的事件都不会接收到。

  2. 如果在ViewGroup的OnTouchEvent中down事件返回true,那么后续move、up不会走onInterceptTouchEvent,而是直接交给viewGroup自身的onTouchEvent来处理。也就是说父层已经截获了这次touch事件,之后的action也不必询问onInterceptTouchEvent,因此在viewGroup的子view中不会再接收到后续的move和up事件。

  3. onInterceptTouchEvent,返回true拦截事件交给自身的onTouchEvent方法处理这个表述是不完整的。我们知道如果onInterceptTouchEvent返回false,那么本次action将发送给更深层的View,
    并且之后的每一次action都会询问父层的onInterceptTouchEvent需不需要截获本次touch事件。如果第一次touch产生的down事件由子view进行处理了,那么后续产生的事件(move\up)在onInterceptTouchEvent()进行了return true的拦截,此时系统认为该viewgroup对此事件不进行处理,将调用父view的onTouchEvent()方法进行处理,并不会交给自身的onTouchEvent()来处理。我们说onInterceptTouchEvent,返回true拦截事件交给自身的onTouchEvent方法处理这个表述的满足情况是,actionDown事件在onInterceptTouchEvent 进行了拦截,会交给自身的onTouch来处理。

有兴趣可以关注一下个人的公众号,一起来交流学习;
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:18:51  更:2021-07-15 16:20:52 
 
开发: 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年5日历 -2024/5/6 7:00:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码