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