多层级手势事件指南
介绍
本示例通过使用ArkUI指南文档中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接:
示例文档
效果预览
不涉及
使用说明
- GestureGroup 组合多级手势: 适用于需要关联触发的手势场景。例如,在图片查看页面中可实现“单击隐藏、双击缩放图像”;在页面中可实现“滑动移动 + 双指缩放”。互斥模式(EXCLUSIVE)适用于手势之间互斥的场景,例如单击与双击;并行模式(PARALLEL)则适用于多个手势可同时生效的场景,例如滑动与缩放,从而避免单一手势的功能局限。
- clipShape 属性裁剪图片形状:适用于父子组件之间存在手势交互的场景。例如,弹窗组件可设置为 BLOCK 以拦截底层事件;列表子项可设为 ACCEPT 以优先响应点击;装饰性组件可设为 IGNORE 以避免影响父组件的手势识别。这有助于确保页面手势交互逻辑的清晰性。
- 手势优先级配置:用于解决手势识别过程中的冲突问题。例如,在“单击 + 双击”场景中,可将双击的优先级设为更高(recognizePriority: 2),以避免单击先触发导致双击失效;在“滑动 + 长按”场景中,可将长按设为更高优先级,以防止滑动误触发长按,从而提升手势识别的准确性。
- 常见多级手势应用:
单击 + 双击:适用于图片或文档查看场景,如双击放大、单击退出;
滑动 + 缩放:适用于图表场景,如滑动移动视图、双指缩放查看细节;
长按 + 滑动:适用于拖拽场景,如长按后滑动以移动元素位置,满足复杂交互需求。
工程目录
entry/src/main/ets/
|---entryability
|---pages
| |---CustomEvent.ets // hitTestBehavior对手势和事件的控制页面
| |---GesturesEvents.ets // 手势与事件页面
| |---OverlayManager.ets // OverlayManager的事件透传页面
| |---TouchEvent.ets // 触摸事件页面
|---pages
| |---Index.ets // 应用主页面
具体实现
- GestureGroup 组合多级手势:创建 GestureGroup 实例,传入手势协作模式(如 GestureMask.EXCLUSIVE 互斥、GestureMask.PARALLEL 并行),再添加需组合的基础手势(如 TapGesture、DoubleTapGesture),实现多级手势关联。
- hitTestBehavior 事件传递控制:在手势的 withOptions 中配置 hitTestBehavior,支持三种模式 ——ACCEPT(响应事件不传递)、IGNORE(忽略事件传父组件)、BLOCK(拦截事件不响应不传递),控制组件手势事件交互。
- 手势优先级配置:通过手势的 withOptions 设置 recognizePriority 属性(数值越大优先级越高),或通过 GestureGroup 添加顺序(先加的优先),解决多级手势识别冲突。
- 单击 + 双击多级手势实现:创建 TapGesture(单击)和 DoubleTapGesture(双击),用 GestureGroup (GestureMask.EXCLUSIVE) 组合,配置双击优先级高于单击,绑定到组件实现 “双击优先响应,单击延后判断”。
- 滑动 + 缩放多级手势实现:组合 PanGesture(滑动)与 PinchGesture(缩放),设为 GestureMask.PARALLEL 并行模式,配置缩放优先级高于滑动,实现 “滑动平移 + 双指缩放” 同时支持。
相关权限
不涉及。
依赖
不涉及。
约束与限制
1.本示例仅支持标准系统上运行, 支持设备:华为手机。
2.本示例为Stage模型,支持API22版本SDK,版本号:6.0.0.33,镜像版本号:OpenHarmony_6.0.0.33。
3.本示例需要使用DevEco Studio NEXT Developer Preview2 (Build Version: 5.0.5.306, built on December 12, 2024)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/MultilevelGestureEvents > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master