未验证 提交 0f5d5449 编写于 作者: O openharmony_ci 提交者: Gitee

!20096 优化ArkTS卡片自定义绘制的Demo

Merge pull request !20096 from zhongjianfei/cherry-pick-1687677854
...@@ -6,7 +6,7 @@ ArkTS卡片开放了自定义绘制的能力,在卡片上可以通过[Canvas]( ...@@ -6,7 +6,7 @@ ArkTS卡片开放了自定义绘制的能力,在卡片上可以通过[Canvas](
```ts ```ts
@Entry @Entry
@Component @Component
struct Card { struct WidgetCard {
private canvasWidth: number = 0; private canvasWidth: number = 0;
private canvasHeight: number = 0; private canvasHeight: number = 0;
// 初始化CanvasRenderingContext2D和RenderingContextSettings // 初始化CanvasRenderingContext2D和RenderingContextSettings
...@@ -26,9 +26,9 @@ struct Card { ...@@ -26,9 +26,9 @@ struct Card {
this.canvasWidth = this.context.width; this.canvasWidth = this.context.width;
this.canvasHeight = this.context.height; this.canvasHeight = this.context.height;
// 绘制画布的背景 // 绘制画布的背景
this.context.fillStyle = 'rgba(203, 154, 126, 1.00)'; this.context.fillStyle = '#EEF0FF';
this.context.fillRect(0, 0, this.canvasWidth, this.canvasHeight); this.context.fillRect(0, 0, this.canvasWidth, this.canvasHeight);
// 在画布的中心绘制一个红色的 // 在画布的中心绘制一个圆
this.context.beginPath(); this.context.beginPath();
let radius = this.context.width / 3; let radius = this.context.width / 3;
let circleX = this.context.width / 2; let circleX = this.context.width / 2;
...@@ -36,35 +36,48 @@ struct Card { ...@@ -36,35 +36,48 @@ struct Card {
this.context.moveTo(circleX - radius, circleY); this.context.moveTo(circleX - radius, circleY);
this.context.arc(circleX, circleY, radius, 2 * Math.PI, 0, true); this.context.arc(circleX, circleY, radius, 2 * Math.PI, 0, true);
this.context.closePath(); this.context.closePath();
this.context.fillStyle = 'red'; this.context.fillStyle = '#5A5FFF';
this.context.fill(); this.context.fill();
// 绘制笑脸的左眼 // 绘制笑脸的左眼
let leftR = radius / 4; let leftR = radius / 13;
let leftX = circleX - (radius / 2); let leftX = circleX - (radius / 2.3);
let leftY = circleY - (radius / 3.5); let leftY = circleY - (radius / 4.5);
this.context.beginPath(); this.context.beginPath();
this.context.arc(leftX, leftY, leftR, 0, Math.PI, true); this.context.arc(leftX, leftY, leftR, 0, 2 * Math.PI, true);
this.context.strokeStyle = '#ffff00'; this.context.strokeStyle = '#FFFFFF';
this.context.lineWidth = 10; this.context.lineWidth = 15;
this.context.stroke(); this.context.stroke();
// 绘制笑脸的右眼 // 绘制笑脸的右眼
let rightR = radius / 4; let rightR = radius / 13;
let rightX = circleX + (radius / 2); let rightX = circleX + (radius / 2.3);
let rightY = circleY - (radius / 3.5); let rightY = circleY - (radius / 4.5);
this.context.beginPath(); this.context.beginPath();
this.context.arc(rightX, rightY, rightR, 0, Math.PI, true); this.context.arc(rightX, rightY, rightR, 0, 2 * Math.PI, true);
this.context.strokeStyle = '#ffff00'; this.context.strokeStyle = '#FFFFFF';
this.context.lineWidth = 10; this.context.lineWidth = 15;
this.context.stroke();
// 绘制笑脸的鼻子
let startX = circleX;
let startY = circleY - 20;
this.context.beginPath();
this.context.moveTo(startX, startY);
this.context.lineTo(startX - 8, startY + 40);
this.context.lineTo(startX + 8, startY + 40);
this.context.strokeStyle = '#FFFFFF';
this.context.lineWidth = 15;
this.context.lineCap = 'round'
this.context.lineJoin = 'round'
this.context.stroke(); this.context.stroke();
// 绘制笑脸的嘴巴 // 绘制笑脸的嘴巴
let mouthR = radius / 2.5; let mouthR = radius / 2;
let mouthX = circleX; let mouthX = circleX;
let mouthY = circleY + (radius / 3); let mouthY = circleY + 10;
this.context.beginPath(); this.context.beginPath();
this.context.arc(mouthX, mouthY, mouthR, Math.PI, 0, true); this.context.arc(mouthX, mouthY, mouthR, Math.PI / 1.4, Math.PI / 3.4, true);
this.context.strokeStyle = '#ffff00'; this.context.strokeStyle = '#FFFFFF';
this.context.lineWidth = 10; this.context.lineWidth = 15;
this.context.stroke(); this.context.stroke();
this.context.closePath();
}) })
} }
}.height('100%').width('100%') }.height('100%').width('100%')
...@@ -73,4 +86,4 @@ struct Card { ...@@ -73,4 +86,4 @@ struct Card {
``` ```
运行效果如下图所示。 运行效果如下图所示。
![WidgetCanvasDemo](figures/WidgetCanvasDemo.png) ![WidgetCanvasDemo](figures/WidgetCanvasDemo.jpeg)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册