HarmonyOS 如何让Canvas重绘

在Canvas的onReady中会有一些状态变量,在变化后需要让此Canvas重绘,该如何操作呢

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

canvas不会根据数据变化自行重绘,需要调用canvas的clearRect方法清空画布后再重新绘制。同时,需要使用@Watch监听更新的那个变量,在更新后触发方法重新绘制canvas画布。

可以参考这个demo:

@Entry
@Component
export struct AudioRecorderDialog {
  controller: CustomDialogController
  @State  @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);
    }
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS Canvas如何触发
436浏览 • 1回复 待解决
怎么Canvas刷新呀?
527浏览 • 1回复 待解决
HarmonyOS websocket断网后如何
203浏览 • 1回复 待解决
HarmonyOS ArkTS数组去
168浏览 • 1回复 待解决
HarmonyOS Canvas如何重置clip
353浏览 • 1回复 待解决
HarmonyOS Canvas如何设置圆角
199浏览 • 1回复 待解决
HarmonyOS 如何使用Canvas画扇形
202浏览 • 1回复 待解决
canvas如何实现水印效果
1114浏览 • 1回复 待解决
如何操作canvas重新绘制
1272浏览 • 1回复 待解决
msyql 连表查询怎么去
2964浏览 • 1回复 待解决
HarmonyOS 如何使用canvas绘制虚线
142浏览 • 1回复 待解决
HarmonyOS Canvas绘制内容如何更新
178浏览 • 1回复 待解决