HarmonyOS GestureModifier绑定到父组件上,事件被父组件消费子组件无法消费

布局结构:

Column() {
  Scroll() {
    child...
  }
}
//绑定动态手势
.gestureModifier(this.modifier)

关于GestureModifier有如下问题:

1、如果通过addGesture添加手势,只有父组件Column能响应到手势,通过addParallelGesture添加手势,父子都能响应但是无法控制只让子组件响应。这一点与直接绑定.gesture()表现不一样,原因是什么?

2.、动态手势设置,如何设置嵌套滑动手势优先级的设置。比如让子组件先响应,父组件后响应或者不响应。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

示例参考如下:

// xxx.ets
import { FrameNode, UIObserver } from '@kit.ArkUI';

class MyButtonModifier implements GestureModifier {
  supportDoubleTap: boolean = true
  eventType: string = '';

  applyGesture(event: UIGestureEvent): void {
    if (this.eventType === 'pan_left') {
      event.addParallelGesture(new PanGestureHandler({
        fingers: 1,
        distance: 5,
        direction: PanDirection.Left
      })
        .onActionUpdate((event: GestureEvent) => {
          console.log('--- pan left on action update');
        })
      )
    } else if (this.eventType === 'pan_right') {
      event.addParallelGesture(new PanGestureHandler({
        fingers: 1,
        distance: 5,
        direction: PanDirection.Right
      })
        .onActionUpdate((event: GestureEvent) => {
          console.log('--- pan right on action update');
        })
      )
    } else if (this.eventType === 'click') {
      event.addParallelGesture(
        new TapGestureHandler()
          .onAction((event: GestureEvent) => {
          })
      )
    }
  }
}

@Entry
@Component
struct GestureModifierTest {
  @State modifier: MyButtonModifier = new MyButtonModifier()

  aboutToAppear(): void {
    this.modifier.eventType = 'click'
    let callback = (event: GestureEvent, frameNode?: FrameNode) => {
      console.log('--- frame node id: ' + frameNode?.getId());
    };
    let observer: UIObserver = this.getUIContext().getUIObserver();
    observer.on('willClick', callback);
  }

  build() {
    Column() {
      Scroll() {
        Row() {
          Text('1')
            .width('90%')
            .height(250)
            .backgroundColor(0xFFFFFF)
            .borderRadius(15)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .margin({ left: 10 })
          Text('2')
            .width('90%')
            .height(250)
            .backgroundColor(0xFFFFFF)
            .borderRadius(15)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .margin({ left: 10 })
          Text('3')
            .width('90%')
            .height(250)
            .backgroundColor(0xFFFFFF)
            .borderRadius(15)
            .fontSize(16)
            .textAlign(TextAlign.Center)
            .margin({ left: 10 })
        }
      }
      .onClick(() => {
        console.log('--- scroll click')
      })
      .id('scroll_component')
      .scrollable(ScrollDirection.Horizontal)
    }
    .id('column_component')
    .gestureModifier(this.modifier)
    // .gesture(
    //   TapGesture()
    // )
    .justifyContent(FlexAlign.Center)
    .width('100%')
    .height('100%')
    .backgroundColor(0xDCDCDC)
  }
}

和.gesture()一样,子组件可以消费到。

分享
微博
QQ
微信
回复
1天前
相关问题
组件事件能否传递组件
2431浏览 • 1回复 待解决
组件事件可以传到组件
692浏览 • 1回复 待解决
组件中如何处理组件内点击事件
2775浏览 • 1回复 待解决
组件调用组件的方法
1289浏览 • 1回复 待解决
组件组件传递函数
304浏览 • 1回复 待解决
组件调用组件里的方法
335浏览 • 1回复 待解决
HarmonyOS 组件调用组件方法
25浏览 • 1回复 待解决
HarmonyOS 组件超出组件宽度
42浏览 • 1回复 待解决
HarmonyOS 组件超出组件布局
31浏览 • 1回复 待解决
组件组件使用@Link双向同步
1055浏览 • 1回复 待解决
设置组件的宽度不超出组件
644浏览 • 1回复 待解决
HarmonyOS 组件超过组件的范围
35浏览 • 1回复 待解决