• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Applying Custom Drawing in the Widget
2
3
4You can apply custom drawing in your ArkTS widget to create a more vibrant experience. Use the [Canvas](../reference/arkui-ts/ts-components-canvas-canvas.md) component to create a canvas on the widget, and then use the [CanvasRenderingContext2D](../reference/arkui-ts/ts-canvasrenderingcontext2d.md) object to draw custom graphics on the canvas. The following code snippet draws a smiling face in the center of a canvas.
5
6```ts
7@Entry
8@Component
9struct Card {
10  private canvasWidth: number = 0;
11  private canvasHeight: number = 0;
12  // Initialize CanvasRenderingContext2D and RenderingContextSettings.
13  private settings: RenderingContextSettings = new RenderingContextSettings(true);
14  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
15
16  build() {
17    Column() {
18      Row() {
19        Canvas(this.context)
20          .margin('5%')
21          .width('90%')
22          .height('90%')
23          .onReady(() => {
24            console.info('[ArkTSCard] onReady for canvas draw content');
25            // Obtain the actual width and height of the canvas in the onReady callback.
26            this.canvasWidth = this.context.width;
27            this.canvasHeight = this.context.height;
28            // Draw the background of the canvas.
29            this.context.fillStyle = 'rgba(203, 154, 126, 1.00)';
30            this.context.fillRect(0, 0, this.canvasWidth, this.canvasHeight);
31            // Draw a red circle in the center of the canvas.
32            this.context.beginPath();
33            let radius = this.context.width / 3;
34            let circleX = this.context.width / 2;
35            let circleY = this.context.height / 2;
36            this.context.moveTo(circleX - radius, circleY);
37            this.context.arc(circleX, circleY, radius, 2 * Math.PI, 0, true);
38            this.context.closePath();
39            this.context.fillStyle = 'red';
40            this.context.fill();
41            // Draw the left eye of the smiling face.
42            let leftR = radius / 4;
43            let leftX = circleX - (radius / 2);
44            let leftY = circleY - (radius / 3.5);
45            this.context.beginPath();
46            this.context.arc(leftX, leftY, leftR, 0, Math.PI, true);
47            this.context.strokeStyle = '#ffff00';
48            this.context.lineWidth = 10;
49            this.context.stroke();
50            // Draw the right eye of the smiling face.
51            let rightR = radius / 4;
52            let rightX = circleX + (radius / 2);
53            let rightY = circleY - (radius / 3.5);
54            this.context.beginPath();
55            this.context.arc(rightX, rightY, rightR, 0, Math.PI, true);
56            this.context.strokeStyle = '#ffff00';
57            this.context.lineWidth = 10;
58            this.context.stroke();
59            // Draw the mouth of the smiling face.
60            let mouthR = radius / 2.5;
61            let mouthX = circleX;
62            let mouthY = circleY + (radius / 3);
63            this.context.beginPath();
64            this.context.arc(mouthX, mouthY, mouthR, Math.PI, 0, true);
65            this.context.strokeStyle = '#ffff00';
66            this.context.lineWidth = 10;
67            this.context.stroke();
68          })
69      }
70    }.height('100%').width('100%')
71  }
72}
73```
74
75The figure below shows the effect.
76
77![WidgetCanvasDemo](figures/WidgetCanvasDemo.png)