HarmonyOs DevEco Studio小技巧31--画布组件Canvas

ops/2024/11/17 2:09:10/

那天我们用画布实现了文字颜色的渐变,实际上画布还有很多好玩的功能,接下来让我们一起试一下画布怎么玩

Canvas

提供画布组件,用于自定义绘制图形。

接口

Canvas

Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext)

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
contextCanvasRenderingContext2D | DrawingRenderingContext12+CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见CanvasRenderingContext2D对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见DrawingRenderingContext对象。

Canvas12+

Canvas(context: CanvasRenderingContext2D | DrawingRenderingContext, imageAIOptions: ImageAIOptions)

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
contextCanvasRenderingContext2D | DrawingRenderingContext12+CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见CanvasRenderingContext2D对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见DrawingRenderingContext对象。
imageAIOptionsImageAIOptions给组件设置一个AI分析选项,通过此项可配置分析类型或绑定一个分析控制器。

属性

除支持通用属性外,还支持以下属性:

enableAnalyzer12+

设置组件支持AI分析,当前支持主体识别、文字识别和对象查找等功能。

需要搭配context中的StartImageAnalyzer和StopImageAnalyzer一起使用。

不能和overlay属性同时使用,两者同时设置时overlay中CustomBuilder属性将失效。该特性依赖设备能力。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填说明
enableboolean

组件支持AI分析,设置为true时,组件可进行AI分析。

默认值:false

事件

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

除支持通用事件外,还支持如下事件:

名称描述
onReady(event: () => void)

Canvas组件初始化完成时或者Canvas组件发生大小变化时的事件回调,当该事件被触发时画布被清空,该事件之后Canvas组件宽高确定且可获取,可使用Canvas相关API进行绘制。当Canvas组件仅发生位置变化时,只触发onAreaChange事件、不触发onReady事件。

onAreaChange事件在onReady事件后触发。


 示例代码---画一个矩形 

@Entry
@Component
struct CanvasExample {/** 用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。 */private settings: RenderingContextSettings = new RenderingContextSettings(true)/** 用来渲染Canvas的上下文对象。这东西也可以叫画笔 */private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Column() {/** 画布/ 这里的context就是绑定上面的画笔 */Canvas(this.context).width('100%').height('100%').backgroundColor('#ffef88af').onReady(() => {/** 填充一个矩形 (x,y,w,h) 单位都是vp* x  指定矩形左上角点的x坐标。* y  指定矩形左上角点的y坐标。* w  指定矩形的宽度* h	指定矩形的高度。* */this.context.fillRect(0, 30, 100, 100)})}.width('100%').height('100%')}
}

 

示例代码 ---画一个半圆

@Entry
@Component
struct CanvasExample {/** 用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。 */private settings: RenderingContextSettings = new RenderingContextSettings(true)/** 用来渲染Canvas的上下文对象。这东西也可以叫画笔 */private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Column() {/** 画布/ 这里的context就是绑定上面的画笔 */Canvas(this.context).width('100%').height('100%').backgroundColor('#ffef88af').onReady(() => {//开始一个新的路径。this.context.beginPath() //使用arc方法绘制一个圆形。参数分别为圆心的x坐标、// 圆心的y坐标、半径、起始角度(以弧度为单位)和结束角度。// 这里的起始角度是0度(即π弧度),结束角度是π弧度,// 所以绘制的是一个半圆。this.context.arc(180, 180, 100, 0, Math.PI) //设置线条的宽度为4像素this.context.lineWidth = 4//设置填充颜色为黑色this.context.fillStyle = Color.Black//使用当前的线条样式(颜色和宽度)来绘制圆形的轮廓this.context.stroke()//使用当前的填充颜色来填充圆形的内部this.context.fill()//关闭当前的路径this.context.closePath() })}.width('100%').height('100%')}
}

示例代码 --画一个六边形

@Entry
@Component
struct CanvasExample {/** 用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。 */private settings: RenderingContextSettings = new RenderingContextSettings(true)/** 用来渲染Canvas的上下文对象。这东西也可以叫画笔 */private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Column() {/** 画布/ 这里的context就是绑定上面的画笔 */Canvas(this.context).width('100%').height('100%').backgroundColor('#ffef88af').onReady(() => {// 以画布左上角为基准0,0this.context.beginPath() // 开始画this.context.moveTo(180, 280) // 移动到六芒星的中心点for (let i = 0; i < 6; i++) {this.context.lineTo(180 + 100 * Math.cos(2 * Math.PI * i / 6 + Math.PI / 2),180 + 100 * Math.sin(2 * Math.PI * i / 6 + Math.PI / 2))}this.context.closePath() // 结束画this.context.lineWidth = 10this.context.strokeStyle = Color.Whitethis.context.stroke()})}.width('100%').height('100%')}
}

示例代码 --自己画 

@Entry
@Component
struct CanvasExample {/** 用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。 */private settings: RenderingContextSettings = new RenderingContextSettings(true)/** 用来渲染Canvas的上下文对象。这东西也可以叫画笔 */private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Column() {/** 画布/ 这里的context就是绑定上面的画笔 */Canvas(this.context).width('100%').layoutWeight(1).backgroundColor('#ffef88af').onTouch(event => {this.context.lineWidth = 10this.context.strokeStyle = Color.Whiteif (event.type === TouchType.Down) {this.context.beginPath()this.context.moveTo(event.touches[0].x, event.touches[0].y)}if (event.type === TouchType.Move) {this.context.lineTo(event.touches[0].x, event.touches[0].y)this.context.stroke()}if (event.type === TouchType.Up) {this.context.closePath()}})Button("清屏").onClick(() => {this.context.clearRect(0, 0, 360, 660)})}.width('100%').height('100%')}
}

 还有很多种玩法 ,自己有时间可以看看

CanvasRenderingContext2D-画布绘制-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者


http://www.ppmy.cn/ops/134296.html

相关文章

Transformer中的算子:其中Q,K,V就是算子

目录 Transformer中的算子 其中Q,K,V就是算子 一、数学中的算子 二、计算机科学中的算子 三、深度学习中的算子 四、称呼的由来 Transformer中的算子 其中Q,K,V就是算子 “算子”这一称呼源于其在数学、计算机科学以及深度学习等多个领域中的广泛应用和特定功能。以下是…

CSP-X2024山东小学组T2:消灭怪兽

题目链接 题目名称 题目描述 怪兽入侵了地球&#xff01; 为了抵抗入侵&#xff0c;人类设计出了按顺序排列好的 n n n 件武器&#xff0c;其中第 i i i 件武器的攻击力为 a i a_i ai​&#xff0c;可以造成 a i a_i ai​ 的伤害。 武器已经排列好了&#xff0c;因此不…

如果https连接的建立是通过cdn分为两段式的连接,而不是直接从源客户端到服务器端握手协商的连接,那么传输内容可信吗?cdn提供商不会作恶吗

在使用 CDN&#xff08;内容分发网络&#xff09;时&#xff0c;HTTPS 连接的确是分为两段式的&#xff0c;但这并不意味着传输内容不可信。以下是关于信任和安全性的几个关键点&#xff1a; 数据加密 端到端加密&#xff1a;在 CDN 代理的情况下&#xff0c;客户端与 CDN 之间…

F5 NGINX Controller 安全漏洞——Nginx版本升级到1.27.1

1. 查看当前版本 nginx -V 2. 备份配置文件 cp -r /etc/nginx /etc/nginx.bak 3. 更新包管理器 apt-get update 4. 下载 NGINX 1.27.1 源码或安装包 wget https://nginx.org/download/nginx-1.27.1.tar.gz 5. 解压并编译 NGINX 源码 tar -xzvf nginx-1.27.1.tar.gz cd…

哈佛商业评论 | 未来商业的技术趋势:百度李彦宏谈技术如何变革商业

在《哈佛商业评论》的HBR IdeaCast节目中&#xff0c;百度联合创始人、首席执行官兼董事长李彦宏分享了他对人工智能&#xff08;AI&#xff09;和其他技术趋势的见解。这期节目讨论了百度如何将生成式AI融入业务&#xff0c;以及这些技术如何重塑我们的生活和工作方式。让我们…

LlamaFactory介绍

目录 一、什么是LlamaFactory 1. 安装 LlamaFactory 2. 下载 LLaMA 模型 3. 运行 LLaMA 模型 4. 微调 LLaMA 模型 5. 优化本地运行 6. 推理加速 7. 硬件要求 二、总结 一、什么是LlamaFactory LlamaFactory 是一个用于训练和运行 LLaMA(Meta 的开源大型语言模型)模型…

远程控制步骤

当远在千里之外的朋友想求助你帮他找到他电脑上的文件、或者是给他安装软件时。但是你给他说了他又找不到&#xff0c;那么这时你就可以通过控制对方的电脑去做一系列的操作。 如何远程控制对方的电脑非常关键。 方法一&#xff08;Windows自带远程桌面功能&#xff09;&#…

Rust 语言学习笔记(三)

引用与解除引用 觉得还是有必要继续深入学习一下 Rust 再练手&#xff0c;毕竟仍然看到 & 和 * 符号还有些恍惚&#xff0c;大概就是 C/C 里的取地址和取值操作吧&#xff0c;实际上也确实类似。只是叫法略有不同, 还有就是在 C/C 多用了指针的概念。 在 C/C 中&#xff…