HarmonyOS 鸿蒙Next canvas 是否有定时刷新的函数类似 Android 的onDraw

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next canvas 是否有定时刷新的函数类似 Android 的onDraw

canvas 是否有定时刷新的函数类似 Android 的onDraw 有吗

2 回复

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

回到顶部