文档管理中心

自定义事件拦截

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

为组件提供自定义的事件拦截能力,适用于需要根据事件在控件上按下时的位置、输入源等事件信息动态决定控件HitTestMode属性的场景,用于控制组件的触摸测试和事件响应行为。

说明
  • 从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

  • 本模块接口仅可在Stage模型下使用。

onTouchIntercept

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onTouchIntercept(callback: Callback<TouchEvent, HitTestMode>): T

给组件绑定自定义事件拦截回调。

说明

从API version 20开始,该接口支持在attributeModifier中调用。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
callback Callback<TouchEvent, HitTestMode> 自定义事件拦截回调。在做触摸测试时回调此函数。通过返回值设置组件的HitTestMode。使用TouchEvent中的touches属性前,需先校验其是否为空。

返回值:

展开
类型 说明
T 返回当前组件。

示例

该示例通过onTouchIntercept修改组件的HitTestMode属性。

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct Index {
  5. isPolygon(event: TouchEvent) {
  6. return true;
  7. }
  8. build() {
  9. Row() {
  10. Column() {
  11. Text('hello world')
  12. .backgroundColor(Color.Blue)
  13. .fontSize(50)
  14. .fontWeight(FontWeight.Bold)
  15. .onClick(() => {
  16. console.info('Text click');
  17. })
  18. }
  19. .width(400)
  20. .height(300)
  21. .backgroundColor(Color.Pink)
  22. .onClick(() => {
  23. console.info('Column click');
  24. })
  25. // 调用onTouchIntercept修改该组件的HitTestMode属性
  26. .onTouchIntercept((event: TouchEvent) => {
  27. console.info('OnTouchIntercept + ' + JSON.stringify(event));
  28. // 使用touches时需要先校验是否为空
  29. if (event && event.touches) {
  30. let touches = event.touches;
  31. for (let i = 0; touches[i] != null; i++) {
  32. console.info('onTouchIntercept touches:', JSON.stringify(touches[i]));
  33. }
  34. }
  35. // 当满足自定义拦截条件时,返回HitTestMode.None使该组件不参与触摸测试
  36. if (this.isPolygon(event)) {
  37. return HitTestMode.None;
  38. }
  39. return HitTestMode.Default;
  40. })
  41. }
  42. .width('100%')
  43. }
  44. }