HarmonyOS 鸿蒙Next canvas 是否有定时刷新的函数类似 Android 的onDraw
HarmonyOS 鸿蒙Next canvas 是否有定时刷新的函数类似 Android 的onDraw
Canvas控件自身没有刷新绘制区域的api接口。当前刷新内容的方案为:@State装饰的变量使用@Watch监听,变量变化时触发自定义方法重新绘制。 @Watch: 参考链接:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-watch-V13
可以如下参考demo:
const VOLUME_DEFAULT: number = 5600;
const VOLUME_LIST_LENGTH: number = 10;
const VOLUME_MAX_HEIGHT: number = 16;
const VOLUME_MIN_HEIGHT: number = 10;
const VOLUME_WIDTH: number = 5;
const VOLUME_SPACE_WIDTH: number = 10;
@Preview
@Entry
@CustomDialog
export struct AudioRecorderDialog {
controller: CustomDialogController
[@State](/user/State) [@Watch](/user/Watch)('draw') volumeList:number[] = [1,1,1,1,1,1,1,1,1,1];
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private timer: number = 0;
aboutToAppear() {
this.volumeList.fill(Math.floor(Math.random() * 100) + 1);
}
aboutToDisappear() {
clearInterval(this.timer);
}
build() {
Column() {
Canvas(this.context)
.width('100%')
.height('50%')
.backgroundColor('#ffff00')
.onReady(() => {
this.draw()
})
Text(this.volumeList.toString())
.onClick(() => {
this.timer = setInterval(() => {
let tem = Math.floor(Math.random() * 100) + 1;
this.volumeList.shift();
this.volumeList.push(tem)
console.error('licheeng', '点击执行 ' + this.volumeList);
}, 1000)
})
.height(50)
}
}
draw(){
console.log('demoTest :' + 's')
// this.context.clearRect()
for (let index = 1; index < this.volumeList.length; index++) {
let element = this.volumeList[index];
this.context.fillRect(index * 5, (100 - element) / 2, 1, element);
}
}
}
更多关于HarmonyOS 鸿蒙Next canvas 是否有定时刷新的函数类似 Android 的onDraw的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next canvas有定时刷新的机制。虽然HarmonyOS鸿蒙Next没有直接等同于Android中onDraw的定时刷新函数,但可以通过其他方式实现类似功能。
在HarmonyOS中,可以利用定时器(如setInterval或setTimeout)来定期更新Canvas内容。每次定时器触发时,可以清除Canvas上的旧内容,并重新绘制新的内容,从而实现类似onDraw的定时刷新效果。
此外,HarmonyOS提供了invalidate方法,用于强制View重绘,这会导致类似于onDraw方法的调用,可以在这里进行绘图的更新。因此,也可以通过不断更新需要绘制的图形属性,并调用invalidate方法来刷新Canvas。
请注意,在HarmonyOS中刷新Canvas时,需要注意性能问题,避免频繁刷新导致的性能下降。可以通过减少刷新次数、使用双缓冲等技术进行优化。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html