-
绑定手势的方式
- 通过gesture、priorityGesture(优先识别该手势)、parallelGesture(并行手势)为组件直接绑定。
- 通过自定义动态属性(给组件设置gestureModifier,然后自定义GestureModifier接口,进行添加和删除首饰),给UIGestureEvent对象调用其接口添加和删除手势。addGesture(添加手势)、addParallelGesture(添加并行手势)、removeGestureByTag(删除手势)、clearGestures(清除手势)。
- 自定义添加手势额外相关类:TapGestureHandler(点击手势处理器)、LongPressGestureHandler(长按手势处理器)、PanGestureHandler(滑动手势处理器)等,跟方法1直接绑定是一一对应的。tag方法:给处理器设置标志。
-
基础手势分类(直接给组件绑定即可)
- TapGesture:支持单击、双击、多次点击事件。count:设置连续点击次数,默认1;fingers:设置点击手指数。
- LongPressGesture:长按手势事件,默认最短长按时间500毫秒。duration:控制最短长按时长。
- PanGesture:滑动手势,当滑动的最小距离达到设定的最小值时触发滑动手势事件。direction:指定触发滑动手势事件的方向;distance:指定触发滑动手势事件的最小滑动距离。
- PinchGesture:捏和手势事件,最少需要2指,最多5指,最小识别距离5vp。fingers:触发最小手指数,默认2;distance:触发最小识别距离,默认5,单位vp。
- RotationGesture:旋转手势,最少2指,最多5指,最小改变度数为1度。fingers:触发最小手指数;angle:触发最小角度变化,默认1,单位deg。
- SwiperGesture:快滑手势,滑动速度需大于速度阈值,默认最小速度为100vp/s。fingers:触发快滑最小手指数,默认1;direction:触发快滑手势的滑动方向。speed:识别快滑的最小速度,默认100vp/s。
-
组合手势
- 两种及以上手势组合为复合手势,支持顺序识别、并发识别、互斥识别。mode:设置组合手势识别模式,顺序、并发、互斥;gesture:设置一个或多个手势类型,可以设置各种基础手势。
-
手势拦截控制
-
onGestureJudgeBegin:为组件绑定自定义手势判定回调。当手势即将成功时,触发用户自定义的回调获取结果。
- 场景:当组合手势时,可以通过获取手势类型,控制特定手势根据特定条件拦截与否。
-
shouldBuiltInRecognizerParallelWith:当组件进行触摸测试时,会触发该回调,提供系统内置手势与响应链上其他组件的手势设置并行关系的回调事件。简单来说就是参数返回当前手势的识别器以及其它手势的识别器,找到与当前需要并行的识别器,比如两个scroll嵌套,参数current是外层scroll,参数others是内层所有组件,找到内层scroll,然后将两个scroll的识别器保存成局部变量,供后面设置父滚动还是子滚动,通过识别器设置enable。注意该回调需要返回值,返回需要并行处理的识别器。
-
onGestureRecognizerJudgeBegin:手势识别器即将要成功时,意思就是在shouldBuiltInRecognizerParallelWith这个回调之后回调给我们使用,这个回调主要作用可以判定当前手势是否拦截;还可以做一些前置处理,如嵌套滚动冲突,在这里也做一次前置滚动判定,如果只在滑动并行手势里面做的话,会导致颤动。event:当前基础手势事件信息;current:当前即将要响应的识别器对象;recognizers:响应链上的其他手势识别器对象;touchRecognizers:响应链上的Touch识别器对象。默认值为null,表示在当前手势绑定组件及其子孙组件没有可响应的Touch识别器。如果有的话,可以精准控制子组件touch事件是否响应,通过cancelTouch。
-
onTouchTestDone:触摸测试结束后,指定手势识别器是否参与后续处理,关键拦截方法preventBegin。
- 适用场景:动态阻止系统手势与自定义滑动手势冲突;嵌套滚动中控制子组件手势优先级;屏蔽某些手势等。
-
-
手势冲突总结:
- 单纯要拦截组件:外部拦截内部使用hitTestMode;内部拦截外部子组件可以在onTouchIntercept这个事件里面拦截父;父组件还可以通过onChildTouchTest这个方法在触摸测试阶段对子组件触摸进行策略分配。
- 单纯拦截手势:onGestureJudgeBegin通过获取手势type来判断是否拦截。
- 滑动冲突:
-
onTouchTestDone:触发时机用户触摸按下时,系统收集完所有手势对象后触发,作用阶段手势识别开始前,核心能力阻止手势参与识别,控制粒度控制整个手势识别器是否生效。
- 在触摸事件分发初期彻底禁用某些手势,调用
gestureRecognizer.preventBegin()阻止识别器生效,避免不可逆的竞争冲突。
- 在触摸事件分发初期彻底禁用某些手势,调用
-
onGestureRecognizerJudgeBegin:触发时机手势满足系统触发阈值时触发,作用阶段手势即将被系统判定成功时(裁决阶段),核心能力动态裁决是否拦截手势,控制粒度精细控制单个手势的成功或失败状态。
- 根据动态条件(如位置、速度、距离、滑动方向等)决定是否拦截手势(如嵌套tabs滑动到边缘时放行父组件手势、嵌套滑动列表、多级滑动衔接等),通过返回值GestureJudgeResult.REJECT或CONTINUE裁决手势。
-
鸿蒙手势处理篇(滑动冲突、基础手势、组合手势)
积水成渊,蛟龙生焉2026-04-23 21:46
相关推荐
lilian2332 小时前
HarmonyOS 7 新特性(二十五)|智慧手势:意图识别与误触治理贾伟康4 小时前
【时光清单|14】HarmonyOS ArkTS 主导航实战:统一页面入口、返回路径和参数校验骐骥17 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象贾伟康9 小时前
【时光清单|05】HarmonyOS ArkTS 倒计时卡片实战:适配 2x2、2x4 与 4x4 多尺寸小雨青年9 小时前
【HarmonyOS 7 悬浮页签深度实战】07 折叠屏、平板与宽窗口的布局适配熊猫钓鱼>_>11 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析大锅盖111 小时前
HarmonyOS ArkUI 非遗纹样素材平台设计复盘:朱砂宣纸与鎏金黛蓝的文化守护2501_9197490312 小时前
华为鸿蒙管理学习生活与工作APP—小羊管理贾伟康12 小时前
【时光清单|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明fengkai454513 小时前
三、存储基础知识