HarmonyOS 鸿蒙Next在图片外层使用长按没有效果

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next在图片外层使用长按没有效果

Row() {
  Image($r('app.media.linkdood_video')).width(50).onClick(() => {
    console.log('点击')
  })
}.gesture(LongPressGesture().onAction(() => {
  console.log('长按')
}))
3 回复

测试有效果,可以把duration调小试一下例如duration:100

@Entry
@Component

export struct RangeSeekBar {

  // 进度条最大长度
  maxLength: number = 300

  // 进度条高度(展示厚度)
  lineHeight: number = 2

  // 球形滑动按钮直径
  circleDiameter: number = 28

  // 进度条最小值
  minAge: number = 18;

  // 进度条最大值
  maxAge: number = 50;

  // 是否按钮为图片背景,默认是圆形button
  isImageBg: boolean = false;

  imageHeight = 40
  imageWidth = 38

  // 进度条左边已滑动按钮和右边(不区分,因为可以交替)
  @State state1: number = 0
  @State state2: number = 0

  // 临时保存开始滑动时的坐标
  preStart: number = 0
  preEnd: number = 0

  // 最终返回值和ui展示长度之间的换算
  dp = 1

  onRangeChanged: Function = (state1: number, state2: number) => {
  }

  @State sizeValue: string = ''

  aboutToAppear(): void {
    this.dp = this.maxLength / (this.maxAge - this.minAge)
    this.state1 = 0
    this.state2 = this.maxLength

    if (this.isImageBg) {
      this.lineHeight = 9
    }
  }

  build() {

    Row(){
      Image($r('app.media.app_icon'))
        .width('50%')
        .onClick(()=>{
          console.log('点击')
        })
    }
    .gesture(
      LongPressGesture({duration:100})
        .onAction(() => {
          console.log('长按')
        })
    )
  }

  private checkBoundary(temp: number): number {
    if (temp >= this.maxLength) {
      return this.maxLength
    }
    return temp >= 0 ? temp : 0
  }

  private notifyRangeChanged() {
    const temp1 = Math.floor(this.state1 / this.dp) + this.minAge
    const temp2 = Math.ceil(this.state2 / this.dp) + this.minAge

    if (this.isRangeReverse()) {
      this.onRangeChanged(temp2, temp1)
    } else {
      this.onRangeChanged(temp1, temp2)
    }
  }

  private getLeftState(): Length {
    return this.isRangeReverse() ? this.state2 : this.state1
  }

  private isRangeReverse(): boolean {
    return this.state1 > this.state2
  }

  private getRangeWidth(): Length {
    const distance = this.state2 - this.state1

    return this.isRangeReverse() ? -distance : distance
  }
}

更多关于HarmonyOS 鸿蒙Next在图片外层使用长按没有效果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next在图片外层使用长按没有效果”的问题,以下提供可能的解决方案:

在HarmonyOS系统中,如果图片外层的长按事件没有响应,可能是由于事件被其他组件拦截或者图片本身的属性设置不正确导致的。

  1. 检查事件拦截

    • 确认图片外层的容器(如布局或自定义组件)是否有设置事件拦截逻辑,确保长按事件没有被提前处理或阻止。
  2. 设置图片属性

    • 确保图片组件本身是可交互的,即没有设置clickablefocusable等属性为false,这些属性会影响事件的传递。
  3. 实现长按监听

    • 在图片外层或图片本身添加长按监听器,确保监听器正确注册并实现了长按事件的处理逻辑。
  4. 检查触摸区域

    • 确认图片的触摸区域是否足够大,有时如果图片太小或触摸区域被其他UI元素遮挡,也可能导致长按事件无法触发。

如果以上方法均无法解决问题,可能是由于系统本身的限制或特定版本的bug导致的。此时,建议查阅HarmonyOS的官方文档或更新日志,了解是否有相关的已知问题或修复方案。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部