1# ArkUI子系统Changelog 2 3## cl.arkui.1 CanvasRenderingContext2D对象与关联的Canvas组件解绑后无法在该Canvas绘制 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11CanvasRenderingContext2D与Canvas组件解绑后,仍能调用绘制方法进行绘制,有可能导致绘制指令错乱而达不到预期绘制效果。 12 13**变更影响** 14 15| 变更前 | 变更后 | 16| ---------------------------------------- | ---------------------------------------- | 17| CanvasRenderingContext2D对象与关联的Canvas组件解绑后,仍能在该Canvas上绘制。<br> | CanvasRenderingContext2D对象与关联的Canvas组件解绑后,无法在该Canvas上绘制。<br> | 18 19**起始API Level** 20 21API 8 22 23**变更发生版本** 24 25从OpenHarmony SDK 5.1.0.41开始。 26 27**变更的接口/组件** 28 29Canvas组件。 30 31**适配指导** 32 33默认行为变更,一个Canvas组件只能关联一个CanvasRenderingContext2D对象,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。 34 35**示例** 36 37```ts 38@Entry 39@Component 40struct Demo { 41 private settings: RenderingContextSettings = new RenderingContextSettings(true) 42 private context1: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 43 private context2: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 44 @State flag: Boolean = true 45 46 build() { 47 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 48 /** 49 * 点击Button,Canvas组件与上一个context解除关联,并关联一个新的context 50 * 变更前:解除关联的context仍能在Canvas上绘制 51 * 变更后:解除关联的context不能在Canvas上绘制 52 */ 53 Button('change context') 54 .onClick(() => { 55 this.flag = !this.flag 56 }) 57 Button('draw context1') 58 .onClick(() => { 59 this.context1.fillStyle = '#FF0000' 60 this.context1.fillRect(50, 150, 50, 50) 61 }) 62 Button('draw context2') 63 .onClick(() => { 64 this.context2.fillStyle = '#00ff00' 65 this.context2.fillRect(150, 150, 50, 50) 66 }) 67 Text(this.flag ? 'context1' : 'context2') 68 Canvas(this.flag ? this.context1 : this.context2) 69 .width(300) 70 .height(300) 71 } 72 .width('100%') 73 .height('100%') 74 } 75} 76```