鸿蒙开发:单一手势实现多次点击事件

前言

本文基于Api13

每个组件除了很多通用的属性之外,也有着很多的通用事件,比如焦点事件,触屏事件,点击事件等等,想必大家对点击事件最熟悉,直接给组件设置onClick方法即可。

TypeScript 复制代码
Button("点击")
        .onClick(() => {
          console.log("===点击事件")
        })

除了以上的系统提供的点击事件之外,你还能通过什么方法实现组件的点击操作,聪明的同学,肯定也能想到通过手势,每个组件也有一个onTouch方法,我们可以使用手指的按下或者抬起做为一个点击操作。

TypeScript 复制代码
Button("点击")
        .onTouch((event) => {
          if (event.type == TouchType.Down) {
            console.log("===手指按下当做点击事件")
          }
        })

那么,两者同时使用,大家猜一下,onClick是否还会执行,如果会执行,谁先谁后呢?

即便是一起使用,onClick方法也会同步执行的,会先走onTouch后走onClick。

除了以上的两种点击事件,还有没有其他的方式可以实现呢?显然是有的,这就是本篇文章要概述的知识点,单一手势中的点击手势。

点击手势(TapGesture)

TapGesture,不仅仅可以实现单击的效果,而且还可以实现双击,以及多击的效果,它只有一个对象参数TapGestureParameters,里面有三个可以选择的参数:

名称 类型 必填 描述
count number 识别的连续点击次数。当设置的值小于1或不设置时,会被转化为默认值。
fingers number 触发点击的手指数,最小为1指, 最大为10指。当设置小于1的值或不设置时,会被转化为默认值。
distanceThreshold number 点击手势移动阈值。当设置的值小于等于0或不设置时,会被转化为默认值。默认值:2^31-1

使用TapGesture,必须要进行绑定事件,这里我们使用gesture进行绑定,并通过onAction进行触发事件,简单案例如下:

TypeScript 复制代码
Button("点击")
        .gesture(TapGesture()
          .onAction((event: GestureEvent) => {
            if (event) {
              console.log("===单击事件")
            }
          })
        )

TapGesture的目的不仅仅是单一的单击的事件,毕竟如果是单击,我们完全使用onClick即可,它更多的是实现多次点击。

实现多次点击

TypeScript 复制代码
Button("点击")
        .gesture(TapGesture({ count: 2 })
          .onAction((event: GestureEvent) => {
            if (event) {
              console.log("===双击事件")
            }
          })
        )

以上呢,我们通过count就实现了一个双击的效果,当然了,你也可以赋值更大的数,来实现你想要的多次点击次数,需要注意的是,第一个,当配置多次点击时,上一次的最后一根手指抬起和下一次的第一根手指按下的超时时间为300毫秒;第二个就是,当上次点击的位置与当前点击的位置距离超过60vp时,手势则会识别失败;在多指情况下,点击的位置为所有参与手势响应手指的平均位置。

实现多指点击

除了count控制点击次数之外,你可以通过fingers参数实现一个多指点击。

TypeScript 复制代码
 Button("点击")
        .gesture(TapGesture({ fingers: 2 })
          .onAction((event: GestureEvent) => {
            if (event) {
              console.log("===2指事件")
            }
          })
        )

需要注意的是,当你在开发中,配置多指时,第一根手指按下后300毫秒内如果没有足够的手指数按下,那么会造成手势识别失败;当你的手指抬起时,抬起后剩余的手指数小于阈值时开始计时,如300ms内未全部抬起则会造成手势识别失败;还有就是当实际点击的手指数超过配置值,才会手势识别成功。

相关总结

TapGesture点击手势,在实际的开发中,更多的是运用于双击或者需要多次点击的场景,如果仅仅是单次点击,建议大家直接使用onClick即可。

最后问大家一个问题,通过gesture绑定了手势后,同样实现了onClick方法,那么两个点击事件会怎么执行?是只走onClick还是只走gesture,还是两个都会走呢?

相关推荐
云诗卡达8 小时前
Flutter安卓APP接入极光推送和本地通知
android·flutter
南村群童欺我老无力.8 小时前
Flutter应用鸿蒙迁移实战:性能优化与渐进式迁移指南
javascript·flutter·ci/cd·华为·性能优化·typescript·harmonyos
水手冰激淋8 小时前
rn_for_openharmony狗狗之家app实战-领养完成实现
harmonyos
Jony_9 小时前
Android 设计架构演进历程
android·android jetpack
犹若故人归9 小时前
Android开发应用--高级UI界面设计
android·ui
牛马11110 小时前
iOS :Codable协议,字典,数组的详细分析和比较
ios
zzhongcy10 小时前
复合索引 (item1, item2, item3 ) > (?, ?, ?) 不起作用,EXPLAIN 后type=ALL(全表扫描)
android·数据库
冬奇Lab11 小时前
稳定性性能系列之十三——CPU与I/O性能优化:Simpleperf与存储优化实战
android·性能优化
像风一样自由12 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
奔跑的露西ly12 小时前
【HarmonyOS NEXT】Stage模型
华为·harmonyos