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

Compose 事件分发:Initial、Main、Final

在传统 View 体系中,我们接触最多的就是

dispatchTouchEvent (父节点 → 子节点) └── onInterceptTouchEvent onTouchEvent (子节点 → 父节点)

而在 Compose 中,事件分发不再依赖 ViewGroup 的拦截模型,而是基于Modifier 链 + PointerInput 节点 + 多阶段事件传递

PointerEventPass.Initial (父节点 → 子节点) 父级优先观察或预处理事件 PointerEventPass.Main (子节点 → 父节点) 子组件优先处理事件,最常用 PointerEventPass.Final (父节点 → 子节点) 父级查看事件是否已被消费,做收尾处理

监听和处理事件的方法(以 Main 为例):

Modifier.pointerInput(Unit) { awaitPointerEventScope { while (true) { val change = awaitPointerEvent(PointerEventPass.Main).changes.first() when { change.changedToDown() -> {} // down 事件 change.positionChanged() -> {} // moved 事件 change.changedToUp() -> {} // up 事件 } logi("事件是否已消费: ${change.isConsumed}") change.consume() // 消费事件 } } }

值得注意的是,传统 View 体系在事件被消费后续就不会回调,而 compose 的事件不管有没有消费都会有回调,通过 isConsumed 字段来判断是否已被消费。compose 的事件分发体系相对来说信息更完整


一般情况下,优先使用高层 API:

Modifier.clickable { } Modifier.draggable(...) Modifier.scrollable(...)

高层手势的API 和 底层手势 API 混用时需要注意顺序,一般是先高层再底层

Modifier .clickable { } .pointerInput(Unit) { }

如果反了的话

Modifier .pointerInput(Unit) { } .clickable { }

pointerInput 接收到的事件就很有可能是 isConsumed 状态 从而影响判断


总结:
Compose 的事件分发可以用一句话概括:同一个指针事件会经过 Initial、Main、Final 三个阶段,在父子节点之间来回传递,组件通过消费事件来影响后续处理。

理解了这三个阶段,就能更好地处理 Compose 中的点击冲突、嵌套滚动、自定义拖拽、多指手势以及复杂组件交互。

http://www.jsqmd.com/news/869488/

相关文章:

  • DownKyi终极指南:5分钟掌握B站8K视频高效下载方案
  • Windows平台PDF处理终极指南:Poppler for Windows让你告别复杂编译
  • NVIDIA Profile Inspector完整教程:如何解锁显卡隐藏设置提升游戏性能50%
  • Altium Designer PCB设计:CAD工具与布线核心技巧全解析
  • LCD人体秤嵌入式方案全解析:从传感器到低功耗设计
  • 口碑好的声乐艺考培训公司推荐,分享挑选正规企业的实用攻略 - myqiye
  • Worldquant研究顾问速通
  • 南平市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 可以一直使用的免费SSL证书申请和配置详细教程
  • 【 Godot 4 学习笔记】命名规范
  • VN设备通道乱序问题解析与Vector硬件固定配置实战
  • 查看连接手机热点的设备IP
  • 襄阳市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 小米K30U Ubuntu内核编译:从环境搭建到boot.img打包全流程
  • 南通市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 靠谱的XR三维场景建模企业推荐,深入分析各公司优势特色 - myqiye
  • AI饲寻:适配智能应用场景
  • 瑞萨MCU的AI战略:从边缘计算到嵌入式AI部署实战
  • 如何高效使用B站视频下载工具:DownKyi专业用户的全面技巧指南
  • 孝感市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 南阳市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 有实力的交通事故诉讼律师分析,处理交通事故厉害的律师哪家靠谱 - myqiye
  • 多合一烧写器设计:从接口协议到硬件实现的嵌入式开发利器
  • RT-Thread全局中断操作:原理、应用与低功耗设计关键
  • Rainmeter桌面美化终极指南:轻松打造个性化Windows桌面的完整教程
  • 多合一烧写器技术解析:从接口协议到选型实战
  • 百度智能云走进文博会:四方战略合作开启AI+IP新叙事
  • 内江市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 晋城市2026黄金回收本地口碑商家榜:黄金首饰+ 白银+ 铂金+ 彩金回收门店及联系方式推荐 - 盛世金银回收
  • 工业触摸一体机应用于汽车工厂,实现标准化作业指导