HarmonyOS 如何清空canvas里绘制的内容

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

canvas不会根据数据变化自行重绘,需要调用canvas的clearRect方法清空画布后再重新绘制。同时,需要使用@watch监听更新的那个变量,在更新后触发方法重新绘制canvas画布。 可以参考一下代码实现:

@Entry
@CustomDialog
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
微信
回复
2天前
相关问题
Canvas绘制内容如何动态更新
1693浏览 • 1回复 待解决
HarmonyOS Canvas绘制内容如何更新
39浏览 • 1回复 待解决
Chart内容如何清空。谢谢。
2753浏览 • 1回复 待解决
如何操作canvas重新绘制
1116浏览 • 1回复 待解决
HarmonyOS 如何使用canvas绘制虚线
45浏览 • 1回复 待解决
HarmonyOS Canvas绘制圆角
12浏览 • 1回复 待解决
如何清空文本输入框内容
867浏览 • 1回复 待解决
如何使用canvas绘制圆角矩形
572浏览 • 1回复 待解决
Canvas如何触发刷新重复绘制
993浏览 • 1回复 待解决
HarmonyOS 如何Canvas中直接绘制SVG?
31浏览 • 1回复 待解决
HarmonyOS Canvas绘制圆角矩形
26浏览 • 1回复 待解决
HarmonyOS Canvas绘制曲线相关
16浏览 • 1回复 待解决
HarmonyOS Canvas绘制imageAPI相关问题
38浏览 • 1回复 待解决
js如何清空一个input 输入框内容
7774浏览 • 1回复 待解决
canvas怎么绘制资源目录下图片
689浏览 • 1回复 待解决