如何实现组件水波纹动画案例

组件水波纹动画案例

HarmonyOS
2024-05-26 12:28:15
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
mzshj

希望在组件(如按钮,列表项等)按压时实现从中间向两边扩散的水波纹动画效果如下图效果

使用的核心API

transition

核心代码解释

上述效果中使用Stack组件来让水波纹与组件层叠来实现这个效果,水波纹动画元素显示时没有动画,创建一毫秒后消失(这个可以根据实际需求来微调),消失的时候添加动画代码如下:

transition(TransitionEffect.asymmetric( 
  TransitionEffect.IDENTITY, 
  TransitionEffect.OPACITY.animation({ duration: 1000, curve: Curve.EaseInOut }).combine( 
    TransitionEffect.scale({ x: 100, y: 100 }) 
  ) 
))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

完整实现代码如下:

@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  @State flag: boolean = false 
  @State ballX: number = 0 
  @State ballY: number = 0 
 
  build() { 
    Column() { 
      Column() { 
      }.layoutWeight(1).backgroundColor(Color.Pink).width("100%") 
 
      Stack() { 
        Button("按钮").width("100%").height("100%").stateEffect(false) 
        if (this.flag) { 
          Row() 
            .width(5) 
            .height(5) 
            .position({ 
              x: this.ballX, 
              y: this.ballY 
            }) 
            .backgroundColor("rgba(0,0,0,0.7)") 
            .transition(TransitionEffect.asymmetric( 
              TransitionEffect.IDENTITY, 
              TransitionEffect.OPACITY.animation({ duration: 1000, curve: Curve.EaseInOut }).combine( 
                TransitionEffect.scale({ x: 100, y: 100 }) 
              ) 
            )) 
            .borderRadius(15) 
        } 
      }.width("100%").height(60).clip(true) 
      .onClick((e) => { 
        this.ballX = e.x - 3 
        this.ballY = e.y - 3 
        this.flag = !this.flag; 
        setTimeout(() => { 
          this.flag = !this.flag; 
        }, 100) 
      }) 
 
      Column() { 
      }.layoutWeight(1).backgroundColor(Color.Pink).width("100%") 
    } 
    .width('100%') 
    .height('100%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

实现效果

注明适配的版本信息

IDE:4.1.1.300

SDK:4.1.2.1

分享
微博
QQ
微信
回复
2024-05-27 16:13:02


相关问题
swiper组件如何实现自定义切换动画
2060浏览 • 1回复 待解决
属性动画如何实现宽高动画效果
2977浏览 • 1回复 待解决
HarmonyOS canvas动画如何实现逐帧动画
934浏览 • 1回复 待解决
如何实现动画转场效果
1790浏览 • 1回复 待解决
HarmonyOS 如何实现RippleView动画
943浏览 • 1回复 待解决
如何应用属性动画实现宽高的动画
1106浏览 • 1回复 待解决
HarmonyOS 如何实现WaveView动画
933浏览 • 1回复 待解决
HarmonyOS 组合动画如何实现
660浏览 • 1回复 待解决