HarmonyOS鸿蒙Next中哪位大神知道这种上升气泡怎么做

HarmonyOS鸿蒙Next中哪位大神知道这种上升气泡怎么做 点击气泡上升,升到一定高度逐渐消失

cke_170.png

cke_440.png


更多关于HarmonyOS鸿蒙Next中哪位大神知道这种上升气泡怎么做的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

大神们给个回复

更多关于HarmonyOS鸿蒙Next中哪位大神知道这种上升气泡怎么做的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,实现上升气泡效果主要使用ArkUI的Canvas组件进行自定义绘制。通过声明式UI描述气泡的初始位置、大小和颜色,结合动画属性(如animation)控制气泡的垂直位移(translate)和透明度(opacity)变化。可以设置多个气泡对象,使用随机函数生成不同的起始位置和上升速度,通过定时器或帧动画驱动连续运动。关键步骤包括在Canvas的onReady回调中获取绘图上下文,使用beginPath、arc等方法绘制圆形气泡,并通过属性动画实现平滑上升与淡出效果。

在HarmonyOS Next中实现点击气泡上升并逐渐消失的效果,可以通过ArkUI的动画和状态管理能力来完成。核心是使用@State@Prop装饰器管理气泡位置与透明度,结合animateTo或关键帧动画实现运动。

以下是简洁的实现思路和代码示例:

1. 定义气泡组件 使用Stack布局叠加气泡,每个气泡用ColumnImage表示,通过绝对定位控制位置。

@Component
struct Bubble {
  // 控制气泡垂直位置和透明度
  @State yOffset: number = 0
  @State opacityValue: number = 1

  build() {
    Column() {
      // 气泡内容,例如图标或文字
      Image($r('app.media.bubble'))
        .width(40)
        .height(40)
    }
    .position({ x: '50%', y: this.yOffset })
    .opacity(this.opacityValue)
    .onClick(() => {
      this.riseAndFade()
    })
  }
}

2. 实现上升消失动画 在点击事件中触发动画,同步改变y坐标(向上移动)和透明度(渐隐)。

private riseAndFade(): void {
  // 使用animateTo执行动画
  animateTo({
    duration: 1000, // 动画时长1秒
    curve: Curve.EaseOut // 缓动曲线
  }, () => {
    this.yOffset = -200 // 上升距离
    this.opacityValue = 0 // 完全透明
  })
}

3. 多气泡动态生成 若需多个气泡,可在父组件中使用循环渲染,并为每个气泡分配独立状态。

@Entry
@Component
struct BubbleContainer {
  @State bubbleList: Array<{ id: number }> = []

  build() {
    Stack() {
      ForEach(this.bubbleList, (item) => {
        Bubble({ key: item.id })
      }, (item) => item.id.toString())

      // 添加气泡按钮
      Button('添加气泡')
        .onClick(() => {
          this.bubbleList.push({ id: Date.now() })
        })
    }
  }
}

4. 优化建议

  • 性能:气泡数量多时,建议使用@ObjectLink@Observed优化状态管理。
  • 动画曲线:调整Curve类型(如Curve.Friction)可模拟更自然的物理效果。
  • 内存管理:动画完成后可延迟移除气泡组件,避免内存泄漏。

此方案利用ArkUI响应式UI与动画API,代码简洁且性能高效,可灵活调整动画参数适配不同场景。

回到顶部