1# LongPressGesture 2 3用于触发长按手势事件,触发长按手势的最少手指数为1,最短长按时间为500毫秒。 4 5> **说明:** 6> 7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8> 9> 部分设备会优先响应系统的双指长按手势,导致应用的双指长按手势不生效。 10 11 12## 接口 13 14LongPressGesture(value?: { fingers?: number, repeat?: boolean, duration?: number }) 15 16当组件默认支持可拖拽时,如Text、TextInput、TextArea、HyperLink、Image和RichEditor等组件。长按手势与拖拽会出现冲突,事件优先级如下: 17 18长按触发时间 < 500ms,长按事件优先拖拽事件响应。 19 20长按触发时间 >= 500ms,拖拽事件优先长按事件响应。 21 22**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 23 24**参数:** 25 26| 参数名称 | 参数类型 | 必填 | 参数描述 | 27| -------- | -------- | -------- | -------- | 28| fingers | number | 否 | 触发长按的最少手指数,最小为1指, 最大取值为10指。<br/>默认值:1 <br/> **说明:** <br/>手指按下后若发生超过15px的移动,则判定当前长按手势识别失败。| 29| repeat | boolean | 否 | 是否连续触发事件回调。true表示连续触发事件回调,false表示不连续触发事件回调。<br/>默认值:false | 30| duration | number | 否 | 触发长按的最短时间,单位为毫秒(ms)。<br/>默认值:500 <br/>**说明:** <br/>取值范围:[0, +∞),设置小于等于0时,按照默认值500处理。| 31| isFingerCountLimited<sup>15+</sup> | boolean | 否 | 是否检查触摸屏幕的手指数量。若触摸屏幕的手指的数量不等于设置的触发长按的最少手指数(即上述fingers参数),手势识别将失败。<br>对于已成功识别的手势,后续触摸屏幕的手指数变化,将不触发repeat事件(若触摸屏幕的手指数恢复到设置的触发长按的最少手指数时,可以触发[onAction](ts-basic-gestures-longpressgesture.md#事件)事件),但可以触发[onActionEnd](ts-basic-gestures-longpressgesture.md#事件)事件。<br>默认值:false。| 32 33 34## 事件 35 36| 名称 | 功能描述 | 37| -------- | -------- | 38| onAction(event:(event: [GestureEvent](ts-gesture-settings.md#gestureevent对象说明)) => void) | LongPress手势识别成功回调。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 39| onActionEnd(event:(event: [GestureEvent](ts-gesture-settings.md#gestureevent对象说明)) => void) | LongPress手势识别成功,最后一根手指抬起后触发回调。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 40| onActionCancel(event: () => void) | LongPress手势识别成功,接收到触摸取消事件触发回调。不返回手势事件信息。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 41| onActionCancel(event:(event: [GestureEvent](ts-gesture-settings.md#gestureevent对象说明)) => void)<sup>18+</sup> | LongPress手势识别成功,接收到触摸取消事件触发回调。返回手势事件信息。<br/>**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。| 42 43## 属性 44 45| 名称 | 类型 |描述 | 46| ---- | ------ | ---------------------------------------- | 47| tag<sup>11+</sup> | string | 设置LongPress手势标志,用于自定义手势判定时区分绑定的手势。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。| 48| allowedTypes<sup>14+</sup> | Array\<[SourceTool](ts-gesture-settings.md#sourcetool枚举说明9)> | 设置LongPress手势支持的事件输入源。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 | 49 50 51## 示例 52 53该示例通过LongPressGesture实现了长按手势的识别。 54 55```ts 56// xxx.ets 57@Entry 58@Component 59struct LongPressGestureExample { 60 @State count: number = 0 61 62 build() { 63 Column() { 64 Text('LongPress onAction:' + this.count).fontSize(28) 65 // 单指长按文本触发该手势事件 66 .gesture( 67 LongPressGesture({ repeat: true }) 68 // 由于repeat设置为true,长按动作存在时会连续触发,触发间隔为duration(默认值500ms) 69 .onAction((event: GestureEvent) => { 70 if (event && event.repeat) { 71 this.count++ 72 } 73 }) 74 // 长按动作一结束触发 75 .onActionEnd((event: GestureEvent) => { 76 this.count = 0 77 }) 78 ) 79 } 80 .height(200) 81 .width(300) 82 .padding(20) 83 .border({ width: 3 }) 84 .margin(30) 85 } 86} 87``` 88 89 90