1# Canvas 2 3提供画布组件,用于自定义绘制图形。 4 5> **说明:** 6> 7> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9## 子组件 10 11不支持。 12 13## 接口 14 15### Canvas 16 17Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext) 18 19**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 20 21**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 22 23**系统能力:** SystemCapability.ArkUI.ArkUI.Full 24 25**参数:** 26 27| 参数名 | 类型 | 必填 | 说明 | 28| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 29| context | [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) \| [DrawingRenderingContext<sup>12+</sup>](ts-drawingrenderingcontext.md) | 否 | CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见[DrawingRenderingContext](ts-drawingrenderingcontext.md)对象。 | 30 31### Canvas<sup>12+</sup> 32 33Canvas(context: CanvasRenderingContext2D | DrawingRenderingContext, imageAIOptions: ImageAIOptions) 34 35**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 36 37**系统能力:** SystemCapability.ArkUI.ArkUI.Full 38 39**参数:** 40 41| 参数名 | 类型 | 必填 | 说明 | 42| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 43| context | [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) \| [DrawingRenderingContext<sup>12+</sup>](ts-drawingrenderingcontext.md) | 是 | CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见[DrawingRenderingContext](ts-drawingrenderingcontext.md)对象。 | 44| imageAIOptions | [ImageAIOptions](ts-image-common.md#imageaioptions) | 是 | 给组件设置一个AI分析选项,通过此项可配置分析类型或绑定一个分析控制器。 | 45 46## 属性 47 48除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性: 49 50### enableAnalyzer<sup>12+</sup> 51 52设置组件支持AI分析,当前支持主体识别、文字识别和对象查找等功能。 53需要搭配[context](ts-canvasrenderingcontext2d.md)中的[StartImageAnalyzer](ts-canvasrenderingcontext2d.md#startimageanalyzer12)和[StopImageAnalyzer](ts-canvasrenderingcontext2d.md#stopimageanalyzer12)一起使用。 54不能和[overlay](ts-universal-attributes-overlay.md#overlay)属性同时使用,两者同时设置时overlay中CustomBuilder属性将失效。该特性依赖设备能力。 55 56**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 57 58**系统能力:** SystemCapability.ArkUI.ArkUI.Full 59 60**参数:** 61 62| 参数名 | 类型 | 必填 | 说明 | 63| ------ | ------- | ---- | ------------------------------------------------------------ | 64| enable | boolean | 是 | 组件支持AI分析,设置为true时,组件可进行AI分析。<br/>默认值:false | 65 66## 事件 67 68除支持[通用事件](ts-universal-events-click.md)外,还支持如下事件: 69 70### onReady 71 72onReady(event: VoidCallback) 73 74Canvas组件初始化完成时或者Canvas组件发生大小变化时的事件回调。 75 76当该事件被触发时画布被清空,该事件之后Canvas组件宽高确定且可获取,可使用Canvas相关API进行绘制。当Canvas组件仅发生位置变化时,只触发[onAreaChange](ts-universal-component-area-change-event.md#onAreaChange)事件,不触发onReady事件。[onAreaChange](ts-universal-component-area-change-event.md#onAreaChange)事件在onReady事件后触发。 77 78**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 79 80**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 81 82**系统能力:** SystemCapability.ArkUI.ArkUI.Full 83 84**参数:** 85 86| 参数名 | 类型 | 必填 | 说明 | 87| ------ | ------- | ---- | ------------------------------------------------------------ | 88| event | [VoidCallback](ts-types.md#voidcallback12) | 是 | Canvas组件初始化完成时或者Canvas组件发生大小变化时的事件回调事件。 | 89 90**示例:** 91 92该示例实现了如何在Canvas组件使用CanvasRenderingContext2D中的方法进行绘制。 93 94```ts 95// xxx.ets 96@Entry 97@Component 98struct CanvasExample { 99 private settings: RenderingContextSettings = new RenderingContextSettings(true) 100 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 101 102 build() { 103 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 104 Canvas(this.context) 105 .width('100%') 106 .height('100%') 107 .backgroundColor('#ffff00') 108 .onReady(() => { 109 this.context.fillRect(0, 30, 100, 100) 110 }) 111 } 112 .width('100%') 113 .height('100%') 114 } 115} 116``` 117  118 119 120该示例实现了如何在Canvas组件使用DrawingRenderingContext中的方法进行绘制。 121 122```ts 123// xxx.ets 124@Entry 125@Component 126struct CanvasExample { 127 private context: DrawingRenderingContext = new DrawingRenderingContext() 128 129 build() { 130 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 131 Canvas(this.context) 132 .width('100%') 133 .height('100%') 134 .backgroundColor('#ffff00') 135 .onReady(() => { 136 this.context.canvas.drawCircle(200, 200, 100) 137 this.context.invalidate() 138 }) 139 } 140 .width('100%') 141 .height('100%') 142 } 143} 144``` 145 