HarmonyOS Canvas 绘画的内容如何跟随外部的状态变动重新绘制?
export enum BAWStyle {White, Black}
@Component
export struct CaptureButton {
  @Prop bawStyle: BAWStyle = BAWStyle.White
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  build() {
    Canvas(this.context)
      .width('100%')
      .height('100%')
      .backgroundColor('#F5DC62')
      .onReady(() => {
        this.onDraw()
      })
  }
  private onDraw() {
    this.drawOuterCircle()
    this.drawInnerCircle()
  }
  private drawOuterCircle() {
    const width = this.context.width
    const height = this.context.height
    const diameter = Math.min(width, height)
    const lineWidth = 4 / 80 * diameter
    this.context.beginPath()
    this.context.arc(
      width / 2,
      height / 2,
      diameter / 2 - lineWidth / 2,
      0,
      2 * Math.PI
    )
    this.context.strokeStyle = this.bawStyle == BAWStyle.White ? '#2E5BFF' : Color.White
    this.context.lineWidth = lineWidth
    this.context.stroke()
  }
  private drawInnerCircle() {
    const width = this.context.width
    const height = this.context.height
    const diameter = Math.min(width, height) * 64 / 80
    this.context.beginPath()
    this.context.arc(
      width / 2,
      height / 2,
      diameter / 2,
      0,
      2 * Math.PI
    )
    this.context.fillStyle = this.bawStyle == BAWStyle.White ? '#2E5BFF' : Color.White
    this.context.lineWidth = 0
    this.context.fill()
  }
}
这段代码是我项目中要绘制一个按钮,但我需要他跟随外部的 BAWStyle 的变化,按钮重新绘制,可以绘制为不同颜色。
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 如何实现清除canvas内容,重新绘制? 
1655浏览  • 1回复 待解决
如何操作canvas重新绘制 
2236浏览  • 1回复 待解决
HarmonyOS 如何清空canvas里绘制的内容 
1236浏览  • 1回复 待解决
HarmonyOS  Canvas绘制内容如何更新 
892浏览  • 1回复 待解决
Canvas绘制内容如何动态更新 
3335浏览  • 1回复 待解决
HarmonyOS使用Canvas自定义绘制内容后,如何根据onTouch事件动态更新绘制的内容? 
1408浏览  • 1回复 待解决
HarmonyOS 使用Canvas时发现在重新绘制时有些问题 
904浏览  • 1回复 待解决
使用canvas渲染文本时,如何基于文本变化,正确绘制出对应的内容? 
2935浏览  • 1回复 待解决
HarmonyOS drawImage图像绘画接口无法绘制出ImageBitmap数据类型 
726浏览  • 1回复 待解决
HarmonyOS  如何使用canvas绘制虚线 
873浏览  • 1回复 待解决
HarmonyOS Canvas绘制image的API相关问题 
1051浏览  • 1回复 待解决
HarmonyOS Canvas绘制文本后,使用scale属性缩放后内容模糊 
1286浏览  • 1回复 待解决
HarmonyOS Canvas绘制圆角 
1227浏览  • 1回复 待解决
HarmonyOS Canvas 组件,如何主动触发绘制 
783浏览  • 1回复 待解决
HarmonyOS 半模态bindSheet每次弹出,其内容都会重新绘制,有没有参数设置能让其保持上次关闭前的状态 
919浏览  • 1回复 待解决
HarmonyOS  如何用动画实现Canvas内容的改变 
1294浏览  • 1回复 待解决
HarmonyOS canvas如何绘制成图片导出 
1186浏览  • 1回复 待解决
如何使用canvas绘制圆角矩形 
1615浏览  • 1回复 待解决
HarmonyOS  Canvas绘制圆角矩形 
1398浏览  • 1回复 待解决
HarmonyOS Canvas绘制曲线相关 
1105浏览  • 1回复 待解决
HarmonyOS 如何在Canvas中直接绘制SVG? 
1129浏览  • 1回复 待解决
HarmonyOS Canvas中如何绘制文本溢出效果? 
1324浏览  • 1回复 待解决
Canvas如何触发刷新重复绘制? 
1978浏览  • 1回复 待解决
canvas怎么绘制资源目录下的图片 
1741浏览  • 1回复 待解决
HarmonyOS 基于canvas绘制额度动效如何实现 
1238浏览  • 1回复 待解决





















可以使用CanvasRenderingContext2D接口, CanvasRenderingContext2D接口支持在下一帧刷新绘制内容,因此只要调用了这个接口,系统会在下一帧自动刷新绘制内容。 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-42-V5
canvas不会根据数据变化自行重绘,需要调用canvas的clearRect方法清空画布后再重新绘制。同时,需要使用@watch监听更新的那个变量,在更新后触发方法重新绘制canvas画布。可以参考以下代码实现: