dev #63
75
entry/src/main/ets/pages/compontents/imageBtn.ets
Normal file
75
entry/src/main/ets/pages/compontents/imageBtn.ets
Normal file
@ -0,0 +1,75 @@
|
||||
@Component
|
||||
export default struct imageBtn {
|
||||
//状态变量unPressed,用于控制按钮的状态
|
||||
@State unPressed: boolean = true
|
||||
btnWidth: string
|
||||
btnHeight: string
|
||||
imgSrc:Resource
|
||||
opacityNum:number=1
|
||||
@Styles customStyle(){
|
||||
.width('100%')
|
||||
.height('100%')
|
||||
}
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Column() {
|
||||
Stack() {
|
||||
// Image($r('app.media.topB_back'))
|
||||
Row() {
|
||||
// 判断当前组件为放开状态
|
||||
if (this.unPressed) {
|
||||
// 插入Row组件,配置过渡效果
|
||||
Image(this.imgSrc)
|
||||
// 水波纹扩散动画:Row组件backgroundColor属性变更(#fff -> #ccc),系统插入动画过渡效果,从组建的中心点开始放大,scale{0,0}变更scale{1,1}
|
||||
.transition({
|
||||
type: TransitionType.Insert,
|
||||
opacity: 0,
|
||||
})
|
||||
}
|
||||
// 判断当前组件为按下状态
|
||||
else if (!this.unPressed) {
|
||||
// 插入Row组件,配置过渡效果
|
||||
Image(this.imgSrc)
|
||||
.opacity(this.opacityNum)
|
||||
.onAppear(() => {
|
||||
// 水波纹聚拢动画:Row组件backgroundColor属性变更(#ccc -> #fff),插入动画过渡效果,scale{1,1}变化为scale{0,0}
|
||||
animateTo({
|
||||
duration: 500,
|
||||
// 聚拢动画播放完成后,需要衔接扩散动画,此时Row组件backgroundColor属性变更(#fff -> #ccc),插入动画过渡效果,scale{0,0}变化为scale{1,1}
|
||||
onFinish: () => {
|
||||
this.opacityNum=1
|
||||
} },
|
||||
() => {
|
||||
this.opacityNum=0.2
|
||||
})
|
||||
})
|
||||
}
|
||||
// 其他状态
|
||||
|
||||
}
|
||||
.justifyContent(FlexAlign.Center)
|
||||
.alignItems(VerticalAlign.Center)
|
||||
}
|
||||
.customStyle()
|
||||
}
|
||||
.width(this.btnWidth)
|
||||
.height(this.btnHeight)
|
||||
}
|
||||
// onTouch事件,监听状态
|
||||
.onTouch((event: TouchEvent) => {
|
||||
// 当按钮按下时,更新按钮的状态(unPressed:true -> false)
|
||||
if (event.type == TouchType.Down) {
|
||||
animateTo({ duration: 400 }, () => {
|
||||
this.unPressed = !this.unPressed
|
||||
})
|
||||
}
|
||||
// 当按钮放开时,更新按钮的状态(unPressed:false -> true)
|
||||
if (event.type == TouchType.Up) {
|
||||
animateTo({ duration: 400 }, () => {
|
||||
this.unPressed = !this.unPressed
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user