HarmonyOS 鸿蒙Next如何实现类似ios的水波纹效果?

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

HarmonyOS 鸿蒙Next如何实现类似ios的水波纹效果?

如题,想要实现点击或长按组件会出现ios一样的水波纹效果。就是material design设计。比如list的item, 点击的时候 item的背景变暗一下 又恢复 就是一个点击效果 这种如何实现?有没有这样的方法,或者能不能出一个方法?如果需要自己去写代码实现绘制的话,那也太垃圾了

2 回复

参考以下demo:

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
 [@State](/user/State) message: string = 'Hello World';
 [@State](/user/State) flag: boolean = false
 [@State](/user/State) ballX: number = 0
 [@State](/user/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%')
 }
}

HarmonyOS 鸿蒙Next实现类似iOS的水波纹效果,可以通过动画和组件组合的方式来实现。以下是一种可能的实现思路:

首先,需要准备几个关键组件和动画属性。可以使用Stack组件来叠加多个圆形,模拟水波纹的效果。每个圆形可以通过scaleopacity属性来控制其大小和透明度。

接着,利用animateTo动画接口来动态改变这些属性。animateTo可以指定动画时长、速度、延迟等参数,并在动画结束时触发回调函数来更新组件状态。

实现时,可以初始化多个圆形,并设置它们的初始缩放比例和透明度。然后,在组件挂载显示后(如在onAppear事件中),调用animateTo来启动动画。通过动态调整缩放比例和透明度,形成水波纹的动画效果。

需要注意的是,为了实现连续的水波纹效果,可以创建多个层叠的圆形,并分别以一定延迟进行相同的动画。同时,为了优化性能,建议使用系统提供的动画接口,避免自定义动画可能引起的UI线程高负载。

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

回到顶部