HarmonyOS 鸿蒙Next 接上个帖子-添加了手势长按识别,但是onActionEnd后的值传出去了但是无效?

HarmonyOS 鸿蒙Next 接上个帖子-添加了手势长按识别,但是onActionEnd后的值传出去了但是无效?

代码目前的功能:去掉了下面scroll的滚动监听,只保留了上面的scroll可以控制下面的scroll和它滚动相同的距离!

为了防止长按上面的scroll同时,滑动下面的scroll,下面的scroll滚动!添加了长按手势 LongPressGesture

问题: ①长按上面scroll的同时,滑动下面的scroll,松开手指,下面的scroll不能滚动了! ②长按上面的scroll,三秒后,松开手指,下面的scroll可以正常滑动!

辛苦各位帮忙看看哪里出了问题!

@Entry @Component struct List_5 { private scrollerX: Scroller = new Scroller(); private scrollerY: Scroller = new Scroller(); private columns: string[] = [‘最新价’, ‘涨跌幅’, ‘涨跌额’, ‘涨速’, ‘量比’, ‘换手率’, ‘成交额’, ‘成交量’, ‘振幅’, ‘委比’, ‘现手’, ‘资金流向’, ‘昨收’, ‘开盘’, ‘最低’]; private flag: boolean = false @State isScrollX: ScrollDirection = ScrollDirection.Horizontal @State isScrollY: ScrollDirection = ScrollDirection.Horizontal

build() { Column() { Scroll(this.scrollerX) { Row() { ForEach(this.columns, (item, index) => { Row() { Text(${item}+${index}).layoutWeight(1).textAlign(TextAlign.Center) Blank() Divider().vertical(true) }.width(100) }) }.height(150).backgroundColor(’#f05b72’) } .scrollable(this.isScrollX) .scrollBar(BarState.Off) .onTouch(() => this.flag = true) .onScroll((x, y) => { if (this.flag) this.scrollerY.scrollBy(x, y) }) .gesture( // 绑定可以重复触发的LongPressGesture LongPressGesture({ repeat: false }) .onAction((event: GestureEvent) => { this.isScrollY = ScrollDirection.None }) .onActionEnd(() => { this.isScrollY = ScrollDirection.Horizontal console.info(‘tip’, 停止${this.isScrollY}) }) )

  Blank().height(100)

  Scroll(this.scrollerY) {
    Row() {
      ForEach(this.columns, (item, index) => {
        Row() {
          Text(`${item}+${index}`).layoutWeight(1).textAlign(TextAlign.Center)
          Blank()
          Divider().vertical(true)
        }.width(100)
      })
    }.height(150).backgroundColor('#f05b72')
  }
  .scrollable(this.isScrollY)
  .scrollBar(BarState.Off)
}

} }


更多关于HarmonyOS 鸿蒙Next 接上个帖子-添加了手势长按识别,但是onActionEnd后的值传出去了但是无效?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

见上个帖子的回答!

更多关于HarmonyOS 鸿蒙Next 接上个帖子-添加了手势长按识别,但是onActionEnd后的值传出去了但是无效?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


滑动手势是监听不到的,而且就算监听到了,也能设置不可滚动,因为下面的列表是要跟随上面的一起滚动的

cke_307.png

在HarmonyOS中,手势长按识别通过Gesture API实现。onActionEnd是手势识别结束时的回调函数,通常用于处理手势结束后的逻辑。如果onActionEnd后的值传出去了但无效,可能原因如下:

  1. 回调函数未正确绑定:确保onActionEnd回调函数正确绑定到手势识别器上。例如:

    gesture.onActionEnd(() => {
        // 处理逻辑
    });
    
  2. 值传递逻辑错误:检查onActionEnd回调函数中的值传递逻辑,确保值正确传递到目标位置。例如:

    gesture.onActionEnd(() => {
        let value = // 获取值
        targetFunction(value); // 传递值
    });
    
  3. 目标接收逻辑问题:确认目标接收逻辑正确处理传入的值。例如:

    function targetFunction(value) {
        // 处理传入的值
    }
    
  4. 生命周期问题:确保onActionEnd回调函数在组件生命周期内执行,避免组件已销毁时仍尝试传递值。

  5. 异步问题:如果值传递涉及异步操作,确保异步操作完成后再进行值传递。

检查以上几点,确保onActionEnd后的值正确传递并生效。

回到顶部