安卓事件分发机制

安卓事件分发机制

一、事件是什么

事件是指用户与应用程序交互时产生的动作或操作,如触摸事件、手势事件、按键事件。

二、事件分发机制是什么

安卓事件分发机制是指在安卓系统中,如何处理和传递用户交互事件的一套机制。

本质:当触发一个点击事件时,系统将这个事件传递给一个具体的View去处理,这个事件传递的过程就是分发过程。

三、事件分发机制存在的意义

为确保用户在应用程序届满上的交互能够正确捕获、传递和处理,从而实现用户与应用程序的有效交互。(简单说就是点击事件存在冲突,用事件分发机制解决)

四、事件在哪些对象中传递?传递顺序是什么?

在Activity、ViewGroup、View中传递。

事件传递的顺序:Activity->ViewGroup->View;即触发一个点击事件时,事件先传递至Activity、在传递到ViewGroup、最终到View中。

1.Activity的事件分发机制

img

三者介绍:

Activity:每个Activity都会包含一个或者多个Window,并通过Window管理其显示内容。

Window:是抽象类,用于表示一个界面窗口,唯一实现是PhoneWindow。

DecorView:是Activity的最顶层View,继承自FrameLayout,包含了整个界面的布局。

2.ViewGroup的事件分发机制
3.View的事件分发机制

五、事件分发的三个主要方法

1.分发:dispatchTouchEvent

此方法用来处理事件的分发,当事件传递给当前View时,首先就是通过调用此方法进行传递的,如果当前View所包含的子View的dispatchTouchEvent方法或者当前View的onTouchEvent方法处理了事件,通常返回true,表示事件已消费,如果没有处理则返回false。

2.拦截:onInterceptTouchEvent(只有在ViewGroup中有)

此方法用来判断某个事件是否需要被拦截,如果某个View拦截了此事件,那么整个事件序列中,此方法不会再被调用,因为会把当前View赋值给mFirstTouchTarget(原本为null),后续传递判断mFirstTouchTarget!=null时,就会调用它的onTouchEvent方法,交给mFirstTouchTarget处理事件。

3.处理:onTouchEvent

用来处理事件,如果事件被消费了,通常返回true,否则返回false,并再同一个事件序列中,当前View不会再接受到事件。

在这里插入图片描述

我们梳理一下从根ViewGroup(也就是DecorView)往下传递事件的过程:首先,事件产生后,通过调用根ViewGroup的dispatchTouchEvent方法,然后,如果这个ViewGroup要拦截事件, 则它的onInterceptTouchEvent返回true,然后事件交给它的onTouchEvent处理,不再进行传递。如果不拦截,则继续调用子view的dispatchTouchEvent方法,继续往下传递,往下递归,直到最终被处理。如果没有任何一个view处理事件, 则最终又会回调给Activity的onTouchEvent方法,如果Activity也不处理,则此事件结束,且没做任何处理。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值