Android中怎么实现事件分发机制

发布时间:2021-06-26 14:40:49 作者:Leah
来源:亿速云 阅读:195

本篇文章给大家分享的是有关Android中怎么实现事件分发机制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、简介

或许你会问,“为什么我一定要知道View的事件分发机制?”。因为我们在实际开发的过程中,经常会遇到多层的View互相嵌套以后,对某一个View进行滑动的时候,特别不灵敏,甚至于没法滑动。这种滑动冲突的解决需要我们清楚的掌握View的事件分发机制。那下面我们详细的讲解下View的整个事件机制。  
Android将View的事件封装到MotionEvent这个类中,这也是监听touch事件中回调给我们的参数public boolean onTouchEvent(MotionEvent event) 。通常事件我们主要关心下面几种类型:

下面我们介绍和事件分发相关的几个方法:

 

二、详细分析View的分发事件

我们都知道,Android的View是树形结构的,所以当一个事件来临的时候一般是从根部分发下来的。为了方便我们接下来的理解,我们构建一个这样的例子:

假设我们有这样一个页面,最外层是一个ViewGroup A,里面嵌套着一个ViewGroup B,B里面有一个ViewGroup C。

Android中怎么实现事件分发机制

 
情景1:

假设我们对事件不做任何拦截,也不做任何处理。当我们点击View C,这个时候我们看到的Log显示调用顺序为:

A -> dispatchTouchEvent
A -> onInterceptTouchEvent
B -> dispatchTouchEvent
B -> onInterceptTouchEvent
C -> dispatchTouchEvent
C -> onInterceptTouchEvent
C -> onTouchEvent ACTION_DOWN
B -> onTouchEvent ACTION_DOWN
A -> onTouchEvent ACTION_DOWN
 

由于没有任何View处理事件,最终会回调到Activity的onTouchEvent中去处理。从这个情景中我们可以知道,事件向下传递的过程以及处理事件的向上传递的过程。

 
情景2:

假设我们在View BonTouchEvent中返回true,再次点击事件并滑动,我们得到的Log如下:

A -> dispatchTouchEvent
A -> onInterceptTouchEvent
B -> dispatchTouchEvent
B -> onInterceptTouchEvent
C -> dispatchTouchEvent
C -> onInterceptTouchEvent
C -> onTouchEvent ACTION_DOWN
B -> onTouchEvent ACTION_DOWN

A -> dispatchTouchEvent
A -> onInterceptTouchEvent
B -> dispatchTouchEvent
B -> onTouchEvent ACTION_MOVE

A -> dispatchTouchEvent
A -> onInterceptTouchEvent
B -> dispatchTouchEvent
B -> onTouchEvent ACTION_UP  
 

我们发现,除了ACTION_DOWN事件会下发到C,后续的事件不会再下发这是因为,当我们发现某一层View的onTouchEvent返回true以后,会有一个标志位表示后续的事件都由此View处理,后续事件不再下发到子View,直到ACTION UP事件后将标志位重置。

 
情景3:

假设我们在View B的onInterceptTouchEvent中返回true,再次点击C会怎么样呢?我们得到如下的Log记录:

A -> dispatchTouchEvent
A -> onInterceptTouchEvent
B -> dispatchTouchEvent
B -> onInterceptTouchEvent
B -> onTouchEvent ACTION_DOWN
A -> onTouchEvent ACTION_DOWN
 

相比较于情景2,ACTION_DOWN事件不会下发到C,由于没有View表示能处理,所以后续的事件均被取消。

 

三、总结

通过我们实际运行和分析源码发现,我们ViewGroup事件的分发流程如下所示:  

Android中怎么实现事件分发机制


以上就是Android中怎么实现事件分发机制,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. Android中点击事件分发机制的原理是什么
  2. android中事件分发机制的实现原理是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android

上一篇:Android8.0中怎么开启service

下一篇:怎么用Python制作图片

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》