diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContext.png b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContext.png
index 66109632d3a029019328c5a039acfd07c8b89533..ecb8410e2debcdf6433eaa2aac8c8f5565265ff4 100644
Binary files a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContext.png and b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContext.png differ
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContextClear.png b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContextClear.png
new file mode 100644
index 0000000000000000000000000000000000000000..858a46712da7a44ca9eb799f59a03f3a3cc302df
Binary files /dev/null and b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/canvas_drawingRenderingContextClear.png differ
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md
index cbf0676e4215b1d5f695000f8bdcc4670813c679..521ab5d632a003908c05e9898cf85b811e968822 100755
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md
@@ -8,10 +8,10 @@
>
> 本文绘制接口在调用时会存入被关联的Canvas组件的指令队列中。仅当当前帧进入渲染阶段且关联的Canvas组件处于可见状态时,这些指令才会从队列中被提取并执行。因此,在Canvas组件不可见的情况下,应尽量避免频繁调用绘制接口,以防止指令在队列中堆积,从而避免内存占用过大的问题。
>
+> [beginPath](#beginpath)、[moveTo](#moveto)、[lineTo](#lineto)、[closePath](#closepath)、[bezierCurveTo](#beziercurveto)、[quadraticCurveTo](#quadraticcurveto)、[arc](#arc)、[arcTo](#arcto)、[ellipse](#ellipse)和[rect](#rect)接口只能对CanvasRenderingContext2D中的路径生效,无法对[OffscreenCanvasRenderingContext2D](./ts-offscreencanvasrenderingcontext2d.md)和[Path2D](./ts-components-canvas-path2d.md)对象中设置的路径生效。
+>
> Canvas组件的宽或高超过8000px时使用CPU渲染,会导致性能明显下降。
-
-
## 接口
CanvasRenderingContext2D(settings?: RenderingContextSettings, unit?: LengthMetricsUnit)
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-canvas-path2d.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-canvas-path2d.md
index 846427ee827ecb0a22a006f0e241ea88597eb998..5fc7018e5bc1dc8ed3b175a78d9bb7fff45806cc 100644
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-canvas-path2d.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-canvas-path2d.md
@@ -5,6 +5,8 @@
> **说明:**
>
> 从 API version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
+>
+> Path2D对象的方法无法对[CanvasRenderingContext2D](./ts-canvasrenderingcontext2d.md)和[OffscreenCanvasRenderingContext2D](./ts-offscreencanvasrenderingcontext2d.md)对象中设置的路径生效。
## 接口
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-offscreencanvas.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-offscreencanvas.md
index a2941aea99f1c9a0ab8c9e7e8cd33c6b5680c5b1..215936e86b12b23803c21f261ec03cdb9cf42da6 100644
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-offscreencanvas.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-components-offscreencanvas.md
@@ -7,6 +7,8 @@ OffscreenCanvas组件用于绘制自定义图形。
> **说明:**
>
> 该组件从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
+>
+> OffscreenCanvas无法在ServiceExtensionAbility中使用,ServiceExtensionAbility中建议使用[Drawing模块](../../apis-arkgraphics2d/js-apis-graphics-drawing.md)进行离屏绘制。
## 子组件
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-drawingrenderingcontext.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-drawingrenderingcontext.md
index 622f151107dcd8d161233127dde156f026c237d9..ff086388b5560d213e0c1dcd0966543c1d89304a 100644
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-drawingrenderingcontext.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-drawingrenderingcontext.md
@@ -59,6 +59,8 @@ invalidate(): void
该示例实现了如何使用DrawingRenderingContext中的方法进行绘制。
```ts
+import { common2D, drawing } from '@kit.ArkGraphics2D';
+
// xxx.ets
@Entry
@Component
@@ -69,11 +71,35 @@ struct CanvasExample {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Canvas(this.context)
.width('100%')
- .height('100%')
- .backgroundColor('#ffff00')
+ .height('50%')
+ .backgroundColor('#D5D5D5')
.onReady(() => {
- this.context.canvas.drawCircle(200, 200, 100)
- this.context.invalidate()
+ let brush = new drawing.Brush();
+ // 使用RGBA(39, 135, 217, 255)填充圆心为(200, 200),半径为100的圆
+ brush.setColor({
+ alpha: 255,
+ red: 39,
+ green: 135,
+ blue: 217
+ });
+ this.context.canvas.attachBrush(brush);
+ this.context.canvas.drawCircle(200, 200, 100);
+ this.context.canvas.detachBrush();
+ this.context.invalidate();
+ })
+ Button("Clear")
+ .width('120')
+ .height('50')
+ .onClick(() => {
+ let color: common2D.Color = {
+ alpha: 0,
+ red: 0,
+ green: 0,
+ blue: 0
+ };
+ // 使用RGBA(0, 0, 0, 0)填充画布
+ this.context.canvas.clear(color);
+ this.context.invalidate();
})
}
.width('100%')
@@ -81,4 +107,11 @@ struct CanvasExample {
}
}
```
- 
+
+图1 绘制圆心为(200, 200),半径为100的圆,填充色为RGBA(39, 135, 217, 255)
+
+ 
+
+图2 点击Clear按钮清空画布
+
+ 
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-media-components-video.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-media-components-video.md
index 60cefc5692ab5f6f1949de2aa1cc0c59fda39e9a..f969092d05cb28cc4948b4e5066f801ba2cb1d02 100755
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-media-components-video.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-media-components-video.md
@@ -6,7 +6,7 @@
>
> 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
> Video组件只提供简单的视频播放功能,无法支撑复杂的视频播控场景。复杂开发场景推荐使用[AVPlayer](../../apis-media-kit/js-apis-media.md#avplayer9)播控API和[XComponent](ts-basic-components-xcomponent.md)组件开发。
-> Video组件在使用expandSafeAre扩展到安全区域时,组件视频显示内容区域不支持扩展。
+> Video组件在使用expandSafeArea扩展到安全区域时,组件视频显示内容区域不支持扩展。
## 权限列表
diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-offscreencanvasrenderingcontext2d.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-offscreencanvasrenderingcontext2d.md
index 2774a1805e68a7bf9f2f1f8f8c599b7c24a17067..218a295515b1ea8d0db8549562da42dac7b573d5 100644
--- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-offscreencanvasrenderingcontext2d.md
+++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-offscreencanvasrenderingcontext2d.md
@@ -5,8 +5,10 @@
> **说明:**
>
> 从 API version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
-
-
+>
+> OffscreenCanvasRenderingContext2D无法在ServiceExtensionAbility中使用,ServiceExtensionAbility中建议使用[Drawing模块](../../apis-arkgraphics2d/js-apis-graphics-drawing.md)进行离屏绘制。
+>
+> [beginPath](#beginpath)、[moveTo](#moveto)、[lineTo](#lineto)、[closePath](#closepath)、[bezierCurveTo](#beziercurveto)、[quadraticCurveTo](#quadraticcurveto)、[arc](#arc)、[arcTo](#arcto)、[ellipse](#ellipse)和[rect](#rect)接口只能对OffscreenCanvasRenderingContext2D中的路径生效,无法对[CanvasRenderingContext2D](./ts-canvasrenderingcontext2d.md)和[Path2D](./ts-components-canvas-path2d.md)对象中设置的路径生效。
## 接口
diff --git a/zh-cn/application-dev/ui/arkts-drawing-customization-on-canvas.md b/zh-cn/application-dev/ui/arkts-drawing-customization-on-canvas.md
index 00a307739b0894360d14964841e321e782bca0a3..2651cefa12cf218edccf25e0e0d757bfd99c7ff3 100644
--- a/zh-cn/application-dev/ui/arkts-drawing-customization-on-canvas.md
+++ b/zh-cn/application-dev/ui/arkts-drawing-customization-on-canvas.md
@@ -152,7 +152,7 @@ Canvas(this.context)
OffscreenCanvasRenderingContext2D对象和CanvasRenderingContext2D对象提供了大量的属性和方法,可以用来绘制文本、图形,处理像素等,是Canvas组件的核心。常用接口有[fill](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#fill)(对封闭路径进行填充)、[clip](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#clip)(设置当前路径为剪切路径)、[stroke](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#stroke)(进行边框绘制操作)等等,同时提供了[fillStyle](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#fillstyle)(指定绘制的填充色)、[globalAlpha](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#globalalpha)(设置透明度)与[strokeStyle](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#strokestyle)(设置描边的颜色)等属性修改绘制内容的样式。将通过以下几个方面简单介绍画布组件常见使用方法:
-- 基础形状绘制。
+- 绘制基础形状。
可以通过[arc](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#arc)(绘制弧线路径)、 [ellipse](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#ellipse)(绘制一个椭圆)、[rect](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#rect)(创建矩形路径)等接口绘制基础形状。
```ts
@@ -178,7 +178,7 @@ OffscreenCanvasRenderingContext2D对象和CanvasRenderingContext2D对象提供
.jpg)
-- 文本绘制。
+- 绘制文本。
可以通过[fillText](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#filltext)(文本填充)、[strokeText](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#stroketext)(文本描边)等接口进行文本绘制,示例中设置了font为50像素高加粗的"sans-serif"字体,然后调用fillText方法在(50, 100)处绘制文本"Hello World!",设置strokeStyle为红色,lineWidth为2,font为50像素高加粗的"sans-serif"字体,然后调用strokeText方法在(50, 150)处绘制文本"Hello World!"的轮廓。
@@ -201,6 +201,50 @@ OffscreenCanvasRenderingContext2D对象和CanvasRenderingContext2D对象提供
.jpg)
+- 绘制文本边框。
+
+ 可以通过[measureText](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#measuretext)(文本测量)计算绘制文本的宽度和高度,使用测量的宽度和高度作为边框的尺寸。在示例中,设置textBaseline为'top',font为30像素的"monospace"字体,通过measureText测量出文本的宽度和高度,然后调用fillText方法在(20, 100)处绘制文本"Hello World!",并调用strokeRect方法在同一位置使用测量的宽度和高度绘制相应尺寸的边框。接着,设置font为60像素的粗体"sans-serif"字体,再次通过measureText测量文本的宽度和高度,接着调用fillText方法在(20, 150)处绘制文本"Hello World!",并调用strokeRect方法在同一位置使用测量的宽度和高度绘制对应尺寸的边框。
+
+ ```ts
+ // xxx.ets
+ @Entry
+ @Component
+ struct measureTextAndRect {
+ drawText: string = "Hello World"
+ private settings: RenderingContextSettings = new RenderingContextSettings(true);
+ private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
+
+ build() {
+ Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
+ Canvas(this.context)
+ .width('100%')
+ .height('100%')
+ .backgroundColor('#F5DC62')
+ .onReady(() => {
+ // 文本的水平对齐方式为'top'
+ this.context.textBaseline = 'top'
+ // 文本字号为30px,字体系列为monospace
+ this.context.font = '30px monospace'
+ let textWidth = this.context.measureText(this.drawText).width
+ let textHeight = this.context.measureText(this.drawText).height
+ this.context.fillText(this.drawText, 20, 100)
+ this.context.strokeRect(20, 100, textWidth, textHeight)
+ // 文本字体粗细为粗体,字号为60px,字体系列为sans-serif
+ this.context.font = 'bold 60px sans-serif'
+ textWidth = this.context.measureText(this.drawText).width
+ textHeight = this.context.measureText(this.drawText).height
+ this.context.fillText(this.drawText, 20, 150)
+ this.context.strokeRect(20, 150, textWidth, textHeight)
+ })
+ }
+ .width('100%')
+ .height('100%')
+ }
+ }
+ ```
+
+ 
+
- 绘制图片和图像像素信息处理。
可以通过[drawImage](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#drawimage)(图像绘制)、[putImageData](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#putimagedata)(使用[ImageData](../reference/apis-arkui/arkui-ts/ts-components-canvas-imagedata.md)数据填充新的矩形区域)等接口绘制图片,通过[createImageData](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#createimagedata)(创建新的ImageData 对象)、[getPixelMap](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#getpixelmap)(以当前canvas指定区域内的像素创建[PixelMap](../reference/apis-image-kit/js-apis-image.md#pixelmap7)对象)、[getImageData](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#getimagedata)(以当前canvas指定区域内的像素创建ImageData对象)等接口进行图像像素信息处理。
@@ -307,7 +351,7 @@ struct CanvasContentUpdate {
## 场景示例
-- 规则基础形状绘制。
+- 绘制规则基础形状。
```ts
@Entry
@@ -339,7 +383,7 @@ struct CanvasContentUpdate {
.jpg)
-- 不规则图形绘制。
+- 绘制不规则图形。
```ts
@Entry
@@ -379,6 +423,199 @@ struct CanvasContentUpdate {

+- 绘制可拖动的光标。
+
+ 可以通过[beginPath](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#beginpath)、[moveTo](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#moveto)、[lineTo](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#lineto)和[arc](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#arc)方法设置光标的位置,使用[stroke](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#stroke)和[fill](../reference/apis-arkui/arkui-ts/ts-canvasrenderingcontext2d.md#fill)方法绘制光标,将是否按下和位置变化通过@Watch监听,并绑定自定义的drawCursor()方法。当拖动光标时,@Watch绑定的方法会执行绘制逻辑,计算并更新光标的颜色和位置。
+
+ ```ts
+ @Entry
+ @Component
+ struct CursorMoving {
+ // 监听是否按下,刷新光标颜色
+ @State @Watch('drawCursor') isTouchDown: boolean = false
+ // 监听位置变化,刷新页面
+ @State @Watch('drawCursor') cursorPosition: RectPosition = {
+ x: 0,
+ y: 0,
+ width: 0,
+ height: 0,
+ }
+ private settings: RenderingContextSettings = new RenderingContextSettings(true);
+ private canvasContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
+ private sw: number = 360; // Canvas固定宽度
+ private sh: number = 270; // Canvas固定高度
+ private cursorWH: number = 50; // 光标区域宽高
+ private dashedLineW: number = 7; // 光标宽高
+ private arcRdius: number = 6; // 光标宽高
+ private isReadyMove: boolean = false
+ private touchPosition: Position = {
+ x: 0,
+ y: 0,
+ };
+ private cursorCenterPosition: Position = {
+ x: 0,
+ y: 0,
+ };
+
+ build() {
+ Column() {
+ // 绘制光标
+ Canvas(this.canvasContext)
+ .width(this.sw)
+ .height(this.sh)
+ .backgroundColor('#D5D5D5')
+ .onReady(() => {
+ this.cursorPosition.x = (this.sw - this.cursorWH) / 2
+ this.cursorPosition.y = (this.sh - this.cursorWH) / 2
+ this.cursorPosition.width = this.cursorWH
+ this.cursorPosition.height = this.cursorWH
+ this.cursorCenterPosition = {
+ x: this.cursorPosition.x + this.cursorPosition.width / 2,
+ y: this.cursorPosition.y + this.cursorPosition.width / 2
+ }
+ this.drawCursor()
+ })
+ .onTouch(event => {
+ if (event.type === TouchType.Down) {
+ this.isReadyMove = this.isTouchCursorArea(event.touches[0]);
+ if (this.isReadyMove) {
+ this.isTouchDown = true
+ }
+
+ this.touchPosition = {
+ x: event.touches[0].displayX,
+ y: event.touches[0].displayY
+ }
+ } else if (event.type === TouchType.Move) {
+ if (this.isReadyMove) {
+ let moveX = event.changedTouches[0].displayX - this.touchPosition.x;
+ let moveY = event.changedTouches[0].displayY - this.touchPosition.y;
+ this.touchPosition = {
+ x: event.changedTouches[0].displayX,
+ y: event.changedTouches[0].displayY
+ }
+ this.cursorPosition.x += moveX;
+ this.cursorPosition.y += moveY;
+
+ this.cursorCenterPosition = {
+ x: this.cursorPosition.x + this.cursorPosition.width / 2,
+ y: this.cursorPosition.y + this.cursorPosition.width / 2
+ }
+ // 光标区域中心点位置限制
+ if (this.cursorCenterPosition.x < 0) {
+ this.cursorPosition.x = -this.cursorPosition.width / 2
+ }
+ if (this.cursorCenterPosition.y < 0) {
+ this.cursorPosition.y = -this.cursorPosition.height / 2
+ }
+ if (this.cursorCenterPosition.x > this.sw) {
+ this.cursorPosition.x = this.sw - this.cursorPosition.width / 2
+ }
+ if (this.cursorCenterPosition.y > this.sh) {
+ this.cursorPosition.y = this.sh - this.cursorPosition.height / 2
+ }
+ }
+ } else {
+ this.isTouchDown = false
+ }
+ })
+ }
+ .height('100%')
+ .width('100%')
+ .justifyContent(FlexAlign.Center)
+ }
+
+ // 绘制裁剪框
+ drawCursor() {
+ // 算出菱形四个点
+ let positionL: Position = { x: this.cursorPosition.x, y: this.cursorPosition.y + this.cursorPosition.height / 2 }
+ let positionT: Position = { x: this.cursorPosition.x + this.cursorPosition.width / 2, y: this.cursorPosition.y }
+ let positionR: Position = {
+ x: this.cursorPosition.x + this.cursorPosition.width,
+ y: this.cursorPosition.y + this.cursorPosition.height / 2
+ }
+ let positionB: Position = {
+ x: this.cursorPosition.x + this.cursorPosition.width / 2,
+ y: this.cursorPosition.y + this.cursorPosition.height
+ }
+ let lineWidth = 2
+ this.canvasContext.clearRect(0, 0, this.sw, this.sh);
+ this.canvasContext.lineWidth = lineWidth
+ this.canvasContext.strokeStyle = this.isTouchDown ? '#ff1a5cae' : '#ffffffff'
+
+ // 画出四角
+ this.canvasContext.beginPath()
+ this.canvasContext.moveTo(positionL.x + this.dashedLineW, positionL.y - this.dashedLineW);
+ this.canvasContext.lineTo(positionL.x, positionL.y);
+ this.canvasContext.lineTo(positionL.x + this.dashedLineW, positionL.y + this.dashedLineW);
+
+ this.canvasContext.moveTo(positionT.x - this.dashedLineW, positionT.y + this.dashedLineW);
+ this.canvasContext.lineTo(positionT.x, positionT.y);
+ this.canvasContext.lineTo(positionT.x + this.dashedLineW, positionT.y + this.dashedLineW);
+
+ this.canvasContext.moveTo(positionR.x - this.dashedLineW, positionR.y - this.dashedLineW);
+ this.canvasContext.lineTo(positionR.x, positionR.y);
+ this.canvasContext.lineTo(positionR.x - this.dashedLineW, positionR.y + this.dashedLineW);
+
+ this.canvasContext.moveTo(positionB.x - this.dashedLineW, positionB.y - this.dashedLineW);
+ this.canvasContext.lineTo(positionB.x, positionB.y);
+ this.canvasContext.lineTo(positionB.x + this.dashedLineW, positionB.y - this.dashedLineW);
+
+ this.canvasContext.stroke()
+
+ // 画出中心圆
+ this.canvasContext.beginPath()
+ this.canvasContext.strokeStyle = this.isTouchDown ? '#ff1a5cae' : '#ff9ba59b'
+ this.canvasContext.fillStyle = this.isTouchDown ? '#ff1a5cae' : '#ff9ba59b'
+ this.canvasContext.arc(this.cursorPosition.x + this.cursorPosition.width / 2,
+ this.cursorPosition.y + this.cursorPosition.width / 2, this.arcRdius, 0, 2 * Math.PI)
+ this.canvasContext.fill()
+ this.canvasContext.stroke()
+
+ // 画出四条线
+ this.canvasContext.beginPath();
+ this.canvasContext.lineWidth = 0.7;
+ this.canvasContext.moveTo(positionL.x, positionL.y);
+ this.canvasContext.lineTo(0, positionL.y);
+
+ this.canvasContext.moveTo(positionT.x, positionT.y);
+ this.canvasContext.lineTo(positionT.x, 0);
+
+ this.canvasContext.moveTo(positionR.x, positionR.y);
+ this.canvasContext.lineTo(this.sw, positionR.y);
+
+ this.canvasContext.moveTo(positionB.x, positionB.y);
+ this.canvasContext.lineTo(positionB.x, this.sh);
+
+ this.canvasContext.stroke();
+ }
+
+ // 判断点击位置是否在棱形中
+ isTouchCursorArea(touch: TouchObject) {
+ let tempLength = Math.sqrt((touch.x - this.cursorCenterPosition.x) * (touch.x - this.cursorCenterPosition.x) +
+ (touch.y - this.cursorCenterPosition.y) * (touch.y - this.cursorCenterPosition.y))
+ if (tempLength < (this.cursorWH / 2 / 1.414)) {
+ return true
+ }
+ return false
+ }
+ }
+
+ export interface RectPosition {
+ x: number;
+ y: number;
+ height: number;
+ width: number;
+ }
+
+ export interface Position {
+ x: number;
+ y: number;
+ }
+ ```
+
+ 
+
## 相关实例
使用画布绘制自定义图形,有以下相关实例可供参考:
diff --git a/zh-cn/application-dev/ui/figures/CursorMoving.gif b/zh-cn/application-dev/ui/figures/CursorMoving.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5dd34d5278f11cdc4cb09f445e9d332022ae50fb
Binary files /dev/null and b/zh-cn/application-dev/ui/figures/CursorMoving.gif differ
diff --git a/zh-cn/application-dev/ui/figures/measureTextAndRect.png b/zh-cn/application-dev/ui/figures/measureTextAndRect.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e3a9ed0b6ba80e2fb75633c523e05d27eb1f0df
Binary files /dev/null and b/zh-cn/application-dev/ui/figures/measureTextAndRect.png differ