如何处理默认自带手势的系统组件进行手势绑定时的冲突场景

​目前很多自带手势的系统组件如list、scroll、Menu等,在绑定手势事件后会发生冲突,以下列举部分相关问题场景:

1.scroll组件和gesture手势同时存在时,gesture手势会失效。

2.组件绑定右键菜单后(触发条件为长按-ResponseType.LongPress),同时绑定LongPressGesture,导致右键菜单不被触发显示。

HarmonyOS
2024-07-22 11:55:45
浏览
已于2024-7-22 11:57:04修改
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
sslijun

默认带有手势事件的系统组件在绑定了手势事件之后,会导致出现手势冲突,可以通过并行手势绑定方法(parallelGesture)去解决手势绑定冲突。

参考代码:

@Entry 
@Component 
struct ScrollExample { 
  scroller: Scroller = new Scroller() 
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Up | PanDirection.Down }) 
 
  build() { 
    Stack({ alignContent: Alignment.TopStart }) { 
      Scroll(this.scroller) { 
        Column() { 
          ForEach(this.arr, (item: number) => { 
            Text(item.toString()) 
              .width('90%') 
              .height(150) 
              .backgroundColor(0xFFFFFF) 
              .borderRadius(15) 
              .fontSize(16) 
              .textAlign(TextAlign.Center) 
              .margin({ top: 10 }) 
          }, (item: string) => item) 
        }.width('100%') 
      } 
      .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 
      .scrollBar(BarState.On) // 滚动条常驻显示 
      .scrollBarColor(Color.Gray) // 滚动条颜色 
      .scrollBarWidth(10) // 滚动条宽度 
      .friction(0.6) 
      .edgeEffect(EdgeEffect.None) 
      .onScroll((xOffset: number, yOffset: number) => { 
        console.info(xOffset + ' ' + yOffset) 
      }) 
      .onScrollEdge((side: Edge) => { 
        console.info('To the edge') 
      }) 
      .onScrollStop(() => { 
        console.info('Scroll Stop') 
      }) 
    } 
    //使用并行手势绑定方法(parallelGesture)进行组件的手势事件绑定,避免与组件自带手势冲突 
    .parallelGesture( 
      PanGesture(this.panOption) 
        .onActionStart((event?: GestureEvent) => { 
          console.info('Pan start', event) 
        }) 
        .onActionUpdate((event?: GestureEvent) => { 
          if (event) { 
            console.info('Pan event', event) 
          } 
        }) 
        .onActionEnd(() => { 
          console.info('Pan end') 
        }) 
    ) 
    .width('100%').height('100%').backgroundColor(0xDCDCDC) 
  } 
}
分享
微博
QQ
微信
回复
2024-07-22 19:44:09
相关问题
基于滚动组件手势处理
164浏览 • 1回复 待解决
Web和List嵌套手势冲突问题
599浏览 • 1回复 待解决
Web组件如何开启手势缩放
1287浏览 • 1回复 待解决
HarmonyOS 如何从子组件控制手势分发
117浏览 • 1回复 待解决
如何处理tabs嵌套web滑动场景
163浏览 • 1回复 待解决
Image组件如何实现双指手势放大
1872浏览 • 1回复 待解决
Swiper组件设置不跟随手势滑动
130浏览 • 1回复 待解决
HarmonyOS 如何是实现手势密码功能
75浏览 • 1回复 待解决
如何处理Redis内存优化?
2507浏览 • 1回复 待解决
组件如何处理组件内点击事件
2247浏览 • 1回复 待解决