HarmonyOS 鸿蒙Next如何实现点击水波纹效果
HarmonyOS 鸿蒙Next如何实现点击水波纹效果
想实现点击水波纹效果,我的需求水波纹怎么在单独一行中显示,超出的部分不显示,一下代码 点击按钮水波纹 下部超出的被遮挡了,但是上边的超出部分还是显示出来了,怎么处理
import ToastUtil from '…/util/ToastUtil’
import { Scale } from '@kit.ArkUI’
import { CommonConstants } from ‘…/constants/CommonConstants’
@Entry
@Component
struct Test {
@State immediatelyScale: Scale = { x: 1, y: 1 };
@State r: number = 0
build() {
Column() {
Blank().width(“100%”).height($r(‘app.float.vp_200’)).backgroundColor($r(‘app.color.color_CC3939’))
Row() {
RelativeContainer() {
Row() {
Text()
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.backgroundColor($r(‘app.color.color_00acff’))
.borderRadius(20)
.scale(this.immediatelyScale)
Text()
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.backgroundColor($r(‘app.color.color_00acff’))
.borderRadius(20)
.scale(this.immediatelyScale)
Text()
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.backgroundColor($r(‘app.color.color_00acff’))
.borderRadius(20)
.scale(this.immediatelyScale)
}
.width(“100%”)
.height($r(‘app.float.vp_40’))
.padding({ left: $r(‘app.float.vp_82’), right: $r(‘app.float.vp_82’) })
.justifyContent(FlexAlign.SpaceBetween)
Row() {
Image($r(‘app.media.video_play_menu_icon’))
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.padding($r(‘app.float.vp_10’))
.onClick(() => {
ToastUtil.showToast(“video_play_menu_icon”)
animateTo({
duration: 1000,
iterations: 1,
curve: Curve.FastOutSlowIn,
onFinish: () => {
this.immediatelyScale = { x: 1, y: 1 }
}
}, () => {
this.immediatelyScale = { x: 2, y: 2 };
})
})
Image($r(‘app.media.video_play_home_icon’))
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.padding($r(‘app.float.vp_10’))
.onClick(() => {
ToastUtil.showToast(“video_play_home_icon”)
})
Image($r(‘app.media.video_play_back_icon’))
.width($r(‘app.float.vp_40’))
.height($r(‘app.float.vp_40’))
.padding($r(‘app.float.vp_10’))
.onClick(() => {
ToastUtil.showToast(“video_play_back_icon”)
})
}
.width(“100%”)
.height($r(‘app.float.vp_40’))
.padding({ left: $r(‘app.float.vp_82’), right: $r(‘app.float.vp_82’) })
.justifyContent(FlexAlign.SpaceBetween)
}.width(“100%”).height($r(‘app.float.vp_40’))
}.width(“100%”).height($r(‘app.float.vp_40’)).backgroundColor($r(‘app.color.color_1E222B’))
Blank().width(“100%”).height($r(‘app.float.vp_200’)).backgroundColor($r(‘app.color.color_CC3939’))
}.width(“100%”).height(“100%”)
}
}
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() {
Stack() {
Button("按钮")
.width(50).height(50).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(50)
.height(50)
.clip(true)
.borderRadius(50)
.onClick((e) => {
this.ballX = e.x - 3
this.ballY = e.y - 3
this.flag = !this.flag;
setTimeout(() => {
this.flag = !this.flag;
}, 100)
})
}
}
HarmonyOS 鸿蒙Next实现点击水波纹效果,可以通过以下几种方式实现:
一、使用RippleLayout控件
RippleLayout是鸿蒙系统提供的一个专门用于实现水波纹效果的布局控件。你只需在布局文件中添加RippleLayout,并设置相关属性如rippleColor(水波纹颜色)、rippleAlpha(水波纹透明度)、rippleDuration(水波纹动画时长)等,然后为RippleLayout添加点击事件监听器,即可在点击时触发水波纹效果。
二、自定义动画
若RippleLayout无法满足需求,还可以通过自定义动画来实现水波纹效果。具体步骤包括:
- 创建一个新的动画资源文件,定义水波纹的动画效果,如透明度变化、缩放变化等。
- 在组件的点击事件中触发该动画。
- 使用系统提供的animateTo接口,通过回调函数设置动画的初始状态和最终状态,实现水波纹的动画效果。
注意事项
- 自定义动画时,务必注意性能优化,避免UI线程高负载。
- RippleLayout和自定义动画可以结合使用,以实现更复杂的水波纹效果。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html