当前位置: 首页 > news >正文

【Android面试八股文】你能说一说在平常开发过程中你是如何解决事件冲突问题的吗?

文章目录

  • 一、内部拦截法(Inner Intercept)
    • 1.1 工作原理:
    • 1.2 实现步骤:
    • 1.3 适用场景:
    • 1.4 内部拦截法示例
      • 1.4.1. 自定义 `RecyclerView` 以处理内部拦截
      • 1.4.2. 在布局中使用 `InterceptableRecyclerView`
    • 1.5 为什么`requestDisallowInterceptTouchEvent(boolean disallowIntercept)` 方法可以实现通知父视图是否允许拦截触摸事件
      • 1.5.1 事件分发机制简述
      • 1.5.2 `requestDisallowInterceptTouchEvent` 的作用
      • 1.5.3 源码分析
        • 1.5.3.1 `ViewGroup` 中的实现
        • 1.5.3.2 子视图调用时的效果
      • 1.5.3 总结
  • 二、外部拦截法(Outer Intercept)
    • 2.1 工作原理:
    • 2.2 实现步骤:
    • 2.3 适用场景:
    • 2.4 外部拦截法示例
      • 2.4.1. 自定义 `HorizontalScrollView` 以处理外部拦截
      • 2.4.2. 在布局中使用 `InterceptableHorizontalScrollView`
  • 三、总结

当涉及处理 Android 应用中的事件冲突时,通常会采用 内部拦截法外部拦截法这两种主要的解决方案。

这两种方法都旨在解决多个视图(View)之间因为处理触摸事件而可能发生的冲突,例如滑动冲突或者嵌套视图中的触摸事件传递问题

一、内部拦截法(Inner Intercept)

内部拦截法是指事件首先传递给子 View,只有当子 View 需要父容器干预时才请求父容器拦截事件

1.1 工作原理:

  • 触摸事件首先传递到子 View
  • 子 View 在其 onTouchEvent()dispatchTouchEvent() 中处理事件,并根据逻辑决定是否让父容器进行处理。
  • 子 View 可以通过调用 requestDisallowInterceptTouchEvent(false) 来允许父容器拦截事件。

1.2 实现步骤:

  1. 子 View 处理事件:在子 View 的 onTouchEvent()dispatchTouchEvent() 中处理事件。

相关文章:

  • 虚幻UE5发送 get、post 请求、读取 json 文件
  • 深入浅出Java的函数式编程
  • 【Vite】控制打包结构
  • 解析Java中1000个常用类:AbstractSet类,你学会了吗?
  • spring 、springboot 运行的原理、理解、分析
  • Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn
  • 四川汇聚荣科技有限公司怎么样?
  • ansibie yum模块
  • 项目3:从0开始的RPC框架(扩展版)-2
  • 【地质灾害监测实现有效预警,44人提前安全转移】
  • linux关于epoll概述(各项组成,以及作用)
  • 前后端分离后灰度发布实现方式
  • iOS Facebook SDK 安装
  • 针对ARM64嵌入式系统的Linux内核参数优化
  • vlan三层交换技术--交换机--(自作)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 230. Kth Smallest Element in a BST
  • express如何解决request entity too large问题
  • JavaScript学习总结——原型
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Lucene解析 - 基本概念
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • spring-boot List转Page
  • Vue2 SSR 的优化之旅
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue--数据传输
  • Vue小说阅读器(仿追书神器)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 你真的知道 == 和 equals 的区别吗?
  • 前端性能优化——回流与重绘
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 说说动画卡顿的解决方案
  • 算法系列——算法入门之递归分而治之思想的实现
  • 算法之不定期更新(一)(2018-04-12)
  • 一天一个设计模式之JS实现——适配器模式
  • MyCAT水平分库
  • zabbix3.2监控linux磁盘IO
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​如何在iOS手机上查看应用日志
  • # Redis 入门到精通(一)数据类型(4)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (9)目标检测_SSD的原理
  • (function(){})()的分步解析
  • (二) 初入MySQL 【数据库管理】
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十六)一篇文章学会Java的常用API
  • (四)opengl函数加载和错误处理
  • (小白学Java)Java简介和基本配置
  • (转)JAVA中的堆栈
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)总结使用Unity 3D优化游戏运行性能的经验