Android之事件分发机制与冲突详解

 更新时间:2021年09月07日 15:09:34   作者:冬天的毛毛雨  
这篇文章主要介绍了Android之事件分发机制与冲突详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

在日常的开发过程中,我们往往会在同一个界面中出现内外两层或者多层View同时滑动的现象,这个时候往往**会出现滑动冲突。面对滑动冲突,很多开发人员不知道从哪里入手,**即便稍微有点思路,也要费点时间才能解决。其实滑动冲突的解决是有一定的套路的。

下面主要针对Android开发中几种常见的滑动冲突及对应的解决方案来进行讲解

常见的滑动冲突场景!

目前常见的滑动冲突主要可以分为以下三种来概括:

  1. 外部滑动方向和内部View的滑动方向不一致,内部的View和外部的View的滑动方向是**互相垂直的,**比如Scroll View嵌套View Pager,如图1-1所示;
  2. 外部滑动方向和内部View的滑动方向是一致的,内部的View和外部的View的滑动方向**互相平行,**比如Scroll View嵌套RecyclerView ,如图1-2所示;
  3. 外部滑动方向与内部滑动方向即有相同的又有垂直的,也就是以上两种情况的综合出现,这种情况是算比较复杂的一种情况,如图1-3所示。

图片

常见滑动冲突的处理思路!

滑动冲突看起来比较棘手,特别像场景3的那种嵌套好几层的滑动冲突。

但不管滑动冲突多么的复杂,它主要涉及到的都是一些触摸事件的分发和拦截,有一定的处理规则在里面,我们可以根据规则来选择合适的方法来进行处理:

常用的冲突解决的两种基本思路

(1). 外部拦截法

即重写父容器的onInterceptTouchEvent方法,根据父容器是否需要拦截这个事件来返回对应的布尔值,如果父容器需要拦截这个触摸事件则返回true,如果不拦截则返回false;

图 2-1

(2). 内部拦截法

即父容器不拦截任何的事件,将对应的事件传递给子元素,根据子元素是否需要消耗这个触摸事件来进行处理,如果子元素不消耗此事件,又会交由父容器来进行对应的处理,子容器需要做如图2-2处理,父容器需要做如图2-3所示处理。

图 2-2

图 2-3

同时,事件冲突也是一线互联网大厂中的必考题,来看看下面这些问题你能答上来几个?

  1. 说说你对事件分发机制的理解。(阿里面试真题)
  2. down事件和move事件对应的流程机制是什么?(腾讯面试真题)
  3. 事件冲突中如何快速找到解决方案,请举例。(字节面试真题)
  4. ScrollView 和RecyclerView 冲突时,如何解决?(百度面试真题)

所以说,关于解决事件冲突的技巧,也是大家需要掌握其中精髓的!

但如果通过博客文章学习,看完后自身是感觉学到了,一旦项目中出现了事件冲突的问题,很难将文章中的知识点运用到实际问题当中,而很多开发者在解决事件冲突中遇到的最大问题,就是很难找到解决问题的切入点。

到此这篇关于Android之事件分发机制与冲突详解的文章就介绍到这了,更多相关Android之事件分发机制与冲突内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android中TextView实现超过固定行数显示“...展开全部”

    Android中TextView实现超过固定行数显示“...展开全部”

    这篇文章主要给大家介绍了关于Android中TextView如何实现超过固定行数显示"...展开全部"的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Android音频焦点管理实例详解

    Android音频焦点管理实例详解

    音频是个专业术语,音频一词已用作一般性描述音频范围内和声音有关的设备及其作用,人类能够听到的所有声音都称之为音频,它可能包括噪音等,下面这篇文章主要给大家介绍了关于Android音频焦点管理的相关资料,需要的朋友可以参考下
    2022-01-01
  • Retrofit 源码分析初探

    Retrofit 源码分析初探

    这篇文章主要介绍了Retrofit 源码分析初探,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Android TextWatcher三个回调以及监听EditText的输入案例详解

    Android TextWatcher三个回调以及监听EditText的输入案例详解

    这篇文章主要介绍了Android TextWatcher三个回调以及监听EditText的输入案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 详解Flutter Image组件如何处理图片加载过程中的错误

    详解Flutter Image组件如何处理图片加载过程中的错误

    在Flutter中,Image组件可以通过监听加载过程中的错误来处理图片加载过程中的错误,本文小编将给大家详细介绍了Flutter Image组件是如何处理图片加载过程中的错误,文中有详细的代码示例供大家参考,需要的朋友可以参下
    2023-10-10
  • Android中的Shape和Selector的结合使用实例

    Android中的Shape和Selector的结合使用实例

    这篇文章主要介绍了Android中的Shape和Selector的结合使用实例,本文直接给出实例代码,需要的朋友可以参考下
    2015-06-06
  • Android通过多点触控的方式对图片进行缩放的实例代码

    Android通过多点触控的方式对图片进行缩放的实例代码

    这篇文章主要介绍了Android通过多点触控的方式对图片进行缩放的实例代码,完成了点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放。
    2018-05-05
  • 关于gradle你应该知道的一些小事

    关于gradle你应该知道的一些小事

    这篇文章主要给大家介绍了关于gradle你应该知道的一些小事,文中通过示例代码介绍的非常详细,对大家学习或者使用gradle具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Android12 蓝牙适配的实现步骤

    Android12 蓝牙适配的实现步骤

    本文主要介绍了Android12 蓝牙适配的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Flutter 使用Navigator进行局部跳转页面的方法

    Flutter 使用Navigator进行局部跳转页面的方法

    这篇文章主要介绍了Flutter 使用Navigator进行局部跳转页面的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论