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