HarmonyOS 鸿蒙Next想要实现红包雨效果但是view在移动过程中点不到
HarmonyOS 鸿蒙Next想要实现红包雨效果但是view在移动过程中点不到
按照工具:241023171601042的写法,在红包增加click事件,但是没有响应。
2 回复
可以参考demo:
class ControllerClass {
add = () => {
}
}
@Entry
@Component
struct RedEnvelopePage {
@State controllerClassIns: ControllerClass = new ControllerClass()
build() {
Column() {
RedEnvelope({ dmController: this.controllerClassIns })
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('发送红包').onClick(() => {
this.controllerClassIns.add()
})
}.padding(20)
}
.border({ width: 1 })
.width('100%')
.margin({ top: '25%' })
.height('50%')
}
}
@Observed
class dmItemClass {
id: number = 0
positionY = -150
angle = Math.random() * 360
}
@Component
struct RedEnvelope {
@Link dmController: ControllerClass
@State dmItemList: dmItemClass[] = []
@State dmHeight: number = 0
aboutToAppear(): void {
this.dmController.add = () => {
this.add()
}
}
build() {
Column() {
ForEach(this.dmItemList, (dmItem: dmItemClass, index) => {
Column() {
RedEnvelopeItem({ dmHeight: this.dmHeight, item: dmItem })
}
.height('100%')
.position({ x: 0, y: 0 })
}, (item: dmItemClass, index) => item.id.toString())
}
.onSizeChange((old, newVal) => {
this.dmHeight = newVal.height as number
})
.clip(true)
.height('100%')
.width('100%')
}
add() {
let ins = new dmItemClass()
if (this.dmItemList.length > 0) {
ins.id = this.dmItemList[this.dmItemList.length - 1].id + 1
}
this.dmItemList.push(ins)
}
}
@Reusable
@Component
struct RedEnvelopeItem {
@Prop dmHeight: number
positionX: number = Math.random() * 330
@ObjectLink item: dmItemClass
inervalNum = -1
aboutToAppear(): void {
this.inervalNum = setInterval(() => {
this.item.positionY += 2
}, 20)
}
build() {
if (this.item.positionY < (this.dmHeight + 100)) {
Column() {}
.onClick(() => {
console.info("点击红包")
})
.width(60)
.height(100)
.backgroundColor('red')
.border({ width: 2 })
.rotate({ angle: this.item.angle })
.onClick(() => {
console.info("进入点击红包")
})
.onDisAppear(() => {
clearInterval(this.inervalNum)
})
.position({
x: this.positionX ? this.positionX : 0,
y: this.item.positionY
})
}
}
}
更多关于HarmonyOS 鸿蒙Next想要实现红包雨效果但是view在移动过程中点不到的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS鸿蒙Next实现红包雨效果时view在移动过程中点不到的问题,这通常是由于视图(view)的触摸事件处理不当或者视图层级管理问题导致的。
在鸿蒙系统中,当视图在动画过程中移动时,其触摸事件的接收可能会受到影响,特别是如果视图在动画过程中改变了其所在的父容器或者其可见性、透明度等属性。
一种可能的解决方案是确保在动画过程中,视图的onTouchEvent
方法能够正确接收到触摸事件。这可能需要你检查以下几点:
- 视图层级:确保视图在动画过程中始终位于可触摸的层级上,没有被其他视图遮挡。
- 触摸事件分发:检查父容器的
onInterceptTouchEvent
方法,确保它没有拦截应该传递给子视图的触摸事件。 - 动画属性:如果动画改变了视图的透明度或大小,确保这些变化不会影响到触摸事件的接收。
如果以上检查都没有问题,但问题依旧存在,那么可能是鸿蒙系统在某些特定情况下的bug或者限制。此时,你可以考虑使用其他方式实现红包雨效果,比如通过自定义动画和事件处理逻辑来绕过这个问题。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html