前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >鸿蒙开发:单一手势实现长按事件

鸿蒙开发:单一手势实现长按事件

原创
作者头像
程序员一鸣
发布于 2025-03-27 02:41:52
发布于 2025-03-27 02:41:52
1670
举报

前言

本文基于Api13

上一篇文章,我们通过单一手势实现了单击和多次点击事件,在实际的开发中,除了点击事件之外,还有常见的长按事件,那么,在鸿蒙当中,如何去实现呢?在上篇文章中,关于点击事件我们列举了三种方式,其实关于长按事件也有多种方式实现,首先,关于长按事件,系统Api并没有一个通用的事件,需要自己来实现。

首先第一种方式,我们肯定能够想到使用onTouch方法,在手指按下的时候记录一个时间值,在手指抬起的时候再记录一个时间值,后者减去前者,如果大于我们定义的长按时间,那么就是一次长按事件,基本代码如下:

代码语言:typescript
AI代码解释
复制
Button("长按")
        .onTouch((event) => {
          if (event.type == TouchType.Down) {
            this.mDownTime = new Date().getTime()
          } else if (event.type == TouchType.Up) {
            let upTime = new Date().getTime()
            if ((upTime - this.mDownTime) > this.mLongClickTime) {
              //大于一秒就是长按
              console.log("===长按事件")
            }
          }
        })

以上的代码,虽然能够实现一个长按事件,但是是在每次手指抬起的时候才去触发,如果我不抬起呢?显然就不能触发,这明显是一个bug存在,所以,我们再去优化一下。

显然就不能在手指抬起的时候去执行一个长按事件,能不能在手指移动的时候呢?显然也是不可以的,毕竟如果手指不动呢,就无法触发移动,这里针对长按事件的实现,最终只能在手指按下,也就是down事件中。

在一个down事件中,如何大于长按的触发时间值呢?这里,我们可以采用延时setTimeout,按下的时候就直接启动延时,当大于所定义的长按时间后,就是一个长按事件,这里有一个注意事项,那就是如果未大于长按的时间,需要清除掉这个延时,否则,手指抬起了,等时间到了也会去执行。

代码语言:typescript
AI代码解释
复制
Button("长按")
        .onTouch((event) => {
          if (event.type == TouchType.Down) {
            this.mDownTime = new Date().getTime()
            this.mLongClickId = setTimeout(() => {
              console.log("===长按事件")
            }, this.mLongClickTime)
          } else if (event.type == TouchType.Up) {
            clearTimeout(this.mLongClickId)
          }
        })

日志输出

以上呢,是通过onTouch手势也实现了一个组件的长按事件,除此之外呢,我们也可以使用单一手势中的长按手势LongPressGesture来实现。

长按手势LongPressGesture

三个参数概述分别如下:

参数名称

参数类型

必填

参数描述

fingers

number

触发长按的最少手指数,最小为1指, 最大取值为10指。默认值:1

repeat

boolean

是否连续触发事件回调。默认值:false

duration

number

触发长按的最短时间,单位为毫秒(ms)。默认值:500

简单案例如下:

代码语言:typescript
AI代码解释
复制
Button("长按")
        .gesture(LongPressGesture()
          .onAction((event: GestureEvent) => {
            if (event) {
              console.log("===长按事件")
            }
          })
        )

和单击一样,都是通过gesture来绑定手势,通过onAction来触发事件。

通过repeat参数,我们可以实现连续触发事件回调。

代码语言:typescript
AI代码解释
复制
Button("长按")
        .gesture(LongPressGesture({ repeat: true })
          .onAction((event: GestureEvent) => {
            if (event) {
              console.log("===长按事件")
            }
          })
        )

当然了,你也可以,通过duration来设置触发长按的最短时间,这里就不举例了。

相关总结

虽然说我们可以通过onTouch来实现一个长按事件,但是如果想要实现连续,多指那么就比较麻烦,远远没有LongPressGesture实现起来简单,所以在实际的开发中,大家还是以LongPressGesture为主。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年12月 HarmonyOS教学课程 039-ArkUI事件(单一手势)
应用程序的手势操作是指在移动设备上使用手指或手势进行与应用程序交互的方式。手势操作可以包括点击、滑动、双击、捏合等动作,用于实现不同的功能和操作。
愚公搬代码
2025/06/02
960
【愚公系列】2023年12月 HarmonyOS教学课程 039-ArkUI事件(单一手势)
【愚公系列】2023年12月 HarmonyOS教学课程 035-ArkUI事件(触屏事件)
触屏事件是指通过触摸屏幕来进行操作和交互的事件。常见的触屏事件包括点击(tap)、双击(double tap)、长按(long press)、滑动(swipe)、拖动(drag)等。触屏事件通常用于移动设备和平板电脑等具有触摸屏幕的设备上,用户可以通过触摸屏幕上的不同区域或者以不同的方式进行操作,从而实现各种功能和交互效果。触屏事件可以被应用程序或者操作系统捕捉并响应,以实现用户与设备之间的交互。
愚公搬代码
2025/06/02
400
【愚公系列】2023年12月 HarmonyOS教学课程 035-ArkUI事件(触屏事件)
【愚公系列】2023年12月 HarmonyOS教学课程 038-ArkUI事件(手势方法)
应用程序的手势操作是指在移动设备上使用手指或手势进行与应用程序交互的方式。手势操作可以包括点击、滑动、双击、捏合等动作,用于实现不同的功能和操作。
愚公搬代码
2025/06/02
570
【愚公系列】2023年12月 HarmonyOS教学课程 038-ArkUI事件(手势方法)
鸿蒙开发:单一手势实现多次点击事件
每个组件除了很多通用的属性之外,也有着很多的通用事件,比如焦点事件,触屏事件,点击事件等等,想必大家对点击事件最熟悉,直接给组件设置onClick方法即可。
程序员一鸣
2025/03/26
1170
鸿蒙开发:单一手势实现多次点击事件
鸿蒙开发:走进stateStyles多态样式
一个组件,多种状态下,我们如何实现呢?举一个很简单的案例,一个按钮,默认状态下是黑色背景,点击后是红色,手指放开后还原黑色。
程序员一鸣
2024/12/20
1940
鸿蒙开发:走进stateStyles多态样式
160.HarmonyOS NEXT系列教程之列表交换组件手势系统实现
全栈若城
2025/03/19
980
鸿蒙开发游戏(二)---大鱼吃小鱼(摇杆控制)
上面需要注意的是x: this.centerX - this.radiusMax,我们知道屏幕的起始点是从左上角开始延伸的,组件的起始位置也是从左上角开始的,我们定义的是中心点,所以要减去圆半径,不然的话就偏移了
cMusketeer
2024/02/11
2310
鸿蒙开发游戏(二)---大鱼吃小鱼(摇杆控制)
80.HarmonyOS NEXT 手势操作实战指南:从理论到实践
通过合理运用这些模型和最佳实践,可以构建出流畅、可靠的手势交互功能。在实际开发中,要根据具体需求选择合适的实现方式,并注意性能优化和用户体验的平衡。
全栈若城
2025/03/16
1170
【愚公系列】2023年12月 HarmonyOS教学课程 040-ArkUI事件(组合手势)
应用程序的手势操作是指在移动设备上使用手指或手势进行与应用程序交互的方式。手势操作可以包括点击、滑动、双击、捏合等动作,用于实现不同的功能和操作。
愚公搬代码
2025/06/02
500
【愚公系列】2023年12月 HarmonyOS教学课程 040-ArkUI事件(组合手势)
鸿蒙开发:简单自定义一个绘制画板
本篇文章,主要是使用Canvas绘制一个简单的画板,可以更改颜色,画笔粗细以及删除操作,主要运用到了CanvasRenderingContext2D中的绘制路径功能,我们可以看下基本实现的效果。
程序员一鸣
2024/12/28
1240
鸿蒙开发:简单自定义一个绘制画板
HarmonyOS 开发实践 —— 基于手势的图片预览与缩放
1、使用组合手势GestureGroup,同时绑定捏合手势PinchGesture和滑动手势PanGesture,设置组合手势识别模式为并行识别模式:Parallel,并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束,并行识别手势组合中的手势进行识别时互不影响。
小帅聊鸿蒙
2024/12/09
3850
鸿蒙开发:自定义一个联系人模版
右边是字母列表,左边是展示字母对应的列表,这种效果常见于通讯录,比如微信通讯录,也常见于手机的联系人,如下图所示:
程序员一鸣
2025/05/21
1060
鸿蒙开发:自定义一个联系人模版
HarmonyOS 开发实践 —— 基于手势绑定的常见问题处理
在默认情况下,手势事件为非冒泡事件,当父子组件绑定相同的手势时,父子组件绑定的手势事件会发生竞争,最多只有一个组件的手势事件能够获得响应,默认子组件优先识别通过gesture绑定的手势。
小帅聊鸿蒙
2024/12/21
2410
HarmonyOS 开发实践 —— 基于手势绑定的常见问题处理
结合源码,重温 Android View 的事件处理知多少 ?
前言 Android View 的 事件处理在我们的编程中,可谓是无处不在了。但对于大多数人而言,一直都是简单的使用,对其原理缺乏深入地认识。 学 Android 有一段时间了,最近发现,很多基础知识开始有些遗忘了,所以从新复习了 View 的事件分发。特地整理成了这篇文章分享给大家。 本文不难,可以作为大家茶余饭后的休闲。 祝大家阅读愉快! 方便大家学习,我在 GitHub 上建立个 仓库 ---- 仓库内容与博客同步更新。由于我在 稀土掘金 简书 CSDN 博客园 等站点,都有新内容发布。所
圆号本昊
2021/09/24
3640
结合源码,重温 Android View 的事件处理知多少 ?
聊聊Android中的手势处理GestureDetector
在Android中,手势处理是用户与设备交互的重要组成部分,尤其在触摸屏设备上。手势检测通常通过触摸事件进行,而GestureDetector是一个用于识别和处理标准手势(如单击、长按、滑动、双击等)的方便工具类。
AntDream
2024/11/18
6030
聊聊Android中的手势处理GestureDetector
184.HarmonyOS NEXT系列教程之列表交换组件交互实现详解
这些内容帮助你理解ListExchangeViewComponent的交互实现。下一篇将详细介绍最佳实践和性能优化。
全栈若城
2025/03/22
1040
【HarmonyOS 5】鸿蒙实现手写板
创建一个可交互的组件,用户在屏幕上触摸并移动手指时,会根据触摸的位置动态生成路径,并使用黑色描边绘制在屏幕上。当用户按下屏幕时,记录按下点的坐标作为路径的起点。当用户移动手指时,不断记录移动点的坐标,通过线段连接起来形成路径。
GeorgeGcs
2025/04/13
880
【HarmonyOS 5】鸿蒙实现手写板
17 HarmonyOS NEXT UVList组件开发指南(四)
除了使用默认的渲染方式外,UVList组件还支持自定义渲染,以满足更复杂的UI需求:
全栈若城
2025/03/09
780
HarmonyOS NEXT 通用事件
当手指或手写笔在组件上触碰时,会触发不同动作所对应的事件响应,包括按下(Down)、滑动(Move)、抬起(Up)事件:
用户9936235
2025/03/31
960
鸿蒙特效教程02-微信语音录制动画效果实现教程
这些技术和概念不仅适用于这个特定效果,还可以应用于各种交互设计中。希望这个教程能帮助你更好地理解HarmonyOS开发,并创建出更加精美的应用界面!
苏杰豪
2025/03/26
1100
鸿蒙特效教程02-微信语音录制动画效果实现教程
推荐阅读
相关推荐
【愚公系列】2023年12月 HarmonyOS教学课程 039-ArkUI事件(单一手势)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档