事件拦截
- 1、参考资料
- 2、HitTestMode
- 3、onTouchIntercept、onTouch、onClick事件执行顺序
- 3.1、系统默认事件传递顺序
- 3.2、子组件拦截事件
1、参考资料
- HarmonyOS(71) 自定义事件分发之TouchTestStrategy使用说明
- HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案
- HitTestMode
- android事件拦截处理机制详解
- HarmonyOS 自定义拦截事件官方文档
2、HitTestMode
在分析事件拦截之前,需要了解下UI组件的hitTestBehavior
属性,该属性可以设置不同的触摸测试响应模式,影响组件的触摸测试收集结果,最终影响后续的触屏事件分发。hitTestBehavior
属性的参数就是HitTestMode,它有四个类型:
Default
: 默认触摸测试效果,自身和子节点都响应触摸测试,但会阻塞兄弟节点的触摸测试。不会影响祖先节点的触摸测试。Block
:自身响应触摸测试,阻塞子节点和兄弟节点的触摸测试。会阻塞祖先节点的触摸测试。Transparent
:自身和子节点都响应触摸测试,不会阻塞兄弟节点的触摸测试。不会影响祖先节点的触摸测试。None
: 自身不响应触摸测试,不会阻塞子节点和兄弟节点的触摸测试。不会影响祖先节点的触摸测试。
HitTestMode的具体效果可以移步 HarmonyOS(70) ArkUI 事件分发拦截,事件冲突解决方案一文了解更多。
3、onTouchIntercept、onTouch、onClick事件执行顺序
onTouchIntercept
为组件提供自定义的事件拦截能力,开发者可根据事件在控件上按下时发生的位置,输入源等事件信息决定控件上的HitTestMode
属性,来实现事件拦截的效果。
本文通过如下代码来测试HarmonyOS
的事件处理机制,布局就是一个粉红色背景的Column
里放置一个蓝色背景的Text
,,且分别为Column
和Text
设置onTouchIntercept
、onTouch
、onClick
:
build() {Column() {Text("hello world") .onClick(() => {