• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>![canvas_before](figures/canvas_before.gif) | CanvasRenderingContext2D对象与关联的Canvas组件解绑后,无法在该Canvas上绘制。<br>![canvas_after](figures/canvas_after.gif) |
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```