「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
Canvas
组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas
组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。
关键词
- Canvas 组件
- 绘图
- 矩形绘制
- 圆形绘制
- 路径与文本
一、Canvas 组件概述
Canvas
组件是鸿蒙中用于自定义图形绘制的关键组件。通过 Canvas
,开发者可以绘制多种图形元素,包括矩形、圆形、路径和文本,满足应用中各种个性化的设计需求。
二、基础图形绘制
2.1 绘制矩形
Canvas
提供了 fillRect
和 strokeRect
方法,可以绘制填充矩形和描边矩形。
@Entry
@Component
struct RectangleCanvasExample {build() {Column() {Canvas(this.context).width('100%').height(500).onReady(() => {// 设置填充颜色为蓝色this.context.fillStyle = '#0000FF';// 绘制填充矩形this.context.fillRect(150, 150, 300, 200);// 设置描边颜色为黑色this.context.strokeStyle = '#000000';// 设置描边宽度为 5this.context.lineWidth = 5;// 绘制描边矩形this.context.strokeRect(150, 150, 300, 200);});}}private context: CanvasRenderingContext2D = new CanvasRenderingContext2D();
}
效果示例:在画布上绘制一个蓝色填充、黑色边框的矩形。
2.2 绘制圆形
使用 arc
方法可以绘制圆形或圆弧,通过设置圆心坐标、半径等参数,可以实现完整圆形和部分圆弧的绘制。
@Entry
@Component
struct CircleCanvasExample {build() {Column() {Canvas(this.context).width('100%').height(600).onReady(() => {// 设置填充颜色为绿色this.context.fillStyle = '#00FF00';// 开始绘制路径this.context.beginPath();// 绘制圆形,指定圆心坐标、半径、起始角度和结束角度this.context.arc(300, 300, 100, 0, 2 * Math.PI);// 填充圆形this.context.fill();});}}private context: CanvasRenderingContext2D = new CanvasRenderingContext2D();
}
效果示例:在画布上绘制一个绿色填充的圆形。
三、路径绘制
通过 Canvas
中的路径绘制方法可以创建更复杂的自定义图形。可以使用 beginPath
、moveTo
、lineTo
等方法绘制路径,并使用 fill
或 stroke
设置填充或边框样式。
3.1 绘制多边形
以下代码展示了如何在 Canvas 上绘制一个简单的三角形路径。
@Entry
@Component
struct PathCanvasExample {build() {Column() {Canvas(this.context).width('100%').height(600).onReady(() => {// 设置路径边框颜色为红色this.context.strokeStyle = '#FF0000';// 设置路径边框宽度为 3this.context.lineWidth = 5;// 开始绘制路径this.context.beginPath();this.context.moveTo(200, 100); // 顶点 1this.context.lineTo(300, 500); // 顶点 2this.context.lineTo(100, 500); // 顶点 3this.context.closePath(); // 闭合路径// 绘制路径边框this.context.stroke();});}}private context: CanvasRenderingContext2D = new CanvasRenderingContext2D();
}
效果示例:在画布上绘制一个红色边框的三角形路径。
四、文本绘制
在 Canvas
组件中,可以通过 fillText
绘制文本,适用于显示标题、标注等文字信息。可以设置字体大小、颜色等属性。
4.1 绘制文本
使用 fillText
方法在 Canvas 中绘制文本,并设置字体、颜色等样式。
@Entry
@Component
struct TextCanvasExample {build() {Column() {Canvas(this.context).width('100%').height('100%').onReady(() => {// 设置字体样式和大小this.context.font = '72px sans-serif';// 设置文本颜色为紫色this.context.fillStyle = '#800080';// 绘制文本this.context.fillText('Hello HarmonyOS!', 150, 350);});}}private context: CanvasRenderingContext2D = new CanvasRenderingContext2D();
}
效果示例:在画布上绘制一个紫色的文本“Hello HarmonyOS!”。
五、综合绘图实例:多图层绘制
以下示例展示了如何在 Canvas 组件中通过组合多个图形来创建更丰富的视觉效果,包括矩形、圆形、路径和文本的综合绘制。
@Entry
@Component
struct ComplexCanvasExample {build() {Column() {Canvas(this.context).width('100%').height(700).onReady(() => {// 绘制背景矩形this.context.fillStyle = '#D3D3D3';this.context.fillRect(0, 0, 300, 400);// 绘制蓝色圆形this.context.fillStyle = '#0000FF';this.context.beginPath();this.context.arc(150, 100, 70, 0, 2 * Math.PI);this.context.fill();// 绘制黑色文本this.context.font = '24px sans-serif';this.context.fillStyle = '#000000';this.context.fillText('Canvas Demo', 85, 300);// 绘制红色三角形路径this.context.strokeStyle = '#FF0000';this.context.lineWidth = 3;this.context.beginPath();this.context.moveTo(75, 350);this.context.lineTo(225, 350);this.context.lineTo(150, 250);this.context.closePath();this.context.stroke();});}}private context: CanvasRenderingContext2D = new CanvasRenderingContext2D();
}
效果示例:在画布上绘制多层图形效果,包括背景矩形、蓝色圆形、黑色文本和红色三角形路径。
小结
本篇详细介绍了鸿蒙 Canvas
组件的基本用法,涵盖了矩形、圆形、路径和文本的绘制。通过合理运用这些基础绘图方法,开发者可以自由绘制丰富多样的图形效果,满足个性化的应用需求。
下一篇预告
在下一篇中,将进一步介绍 Canvas 组件的静态进阶应用,让 Canvas 绘制更加有趣。
上一篇:「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
下一篇:「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
相关文章:

「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆…...

山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行
第二十届三中全会于2024年7月15日至18日在北京举行。全会审议通过了《关于进一步全面深化改革、推进中国式现代化的决定》。其中提到,“要健全因地制宜发展新质生产力体制机制”。 新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力…...
java: 题目:银行账户管理系统
题目:银行账户管理系统 设计一个简单的银行账户管理系统。要求实现以下功能: 1. 创建一个银行账户 BankAccount 类,该类具有以下属性:accountNumber(账户号码,类型为 String) balanceÿ…...

PH热榜 | 2024-11-06
DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 Github:https://github.com/LaughingZhu/DevNow 1. MindOne Builder 标语:这是一个“设计优先”的应用构建工具…...
五、Java并发 Java Google Guava 实现
Guava 是托管在 Github.com 上的流行的 Google 开源的 Java 线程池库。 Guava 包含了许多有用的并发类,同时还包含了几个方便的 ExecutorService 实现,但这些实现类都无法通过直接实例化或子类化来创建实例。取而代之的是提供了 MoreExecutors 助手类来…...

ssm公交车信息管理系统+vue
系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 摘要 I Abstract II 第1章 绪 论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 国内外研究现状 …...

如何删除react项目的默认图标,使在浏览器中不显示默认图标favicon.ico
要删除 React 项目的默认图标,使在浏览器中不显示默认图标favicon.ico,其实有两种方法: 方法一 方法要点:删除掉 public 目录下的 favicon.ico 文件,再用浏览器访问时,如果加载不到图标文件,就…...
【React】react-app-env.d.ts 文件
在使用 create-react-app 生成的 TypeScript 项目模板中,react-app-env.d.ts 文件的作用是为 React 应用中的全局变量和类型进行声明。 全局类型声明:react-app-env.d.ts 文件会引入 react-scripts 提供的全局类型定义,这些类型定义扩展了 Ty…...

设计模式讲解01-建造者模式(Builder)
1. 概述 建造者模式也称为:生成器模式 定义:建造者模式是一种创建型设计模式,它允许你将创建复杂对象的步骤与表示方式相分离。 解释:建造者模式就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单…...

wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 wflow-web是一个开源的工作流设计器,它支持可视化拖拽表单组件,动态任意层级结构审批节点,以及复杂流程条件的设置…...
Promise 简单介绍及深入挖掘
一、什么是 Promise? 在 JavaScript 中,Promise 是用于处理异步操作的一种方式。它代表了一个 可能 在将来某个时间点完成或失败的操作的结果。Promise 使得我们能够优雅地处理异步代码,避免了回调地狱(Callback Hell)…...

103 - Lecture 1
Introduction to Database 一、Introduction to Database Systems 1. 数据的定义 What is Data? EX: data could be a docx file storing your project status report; data could be a spreadsheet containing information • 数据只有在设计的场景中才有意义。ÿ…...
Ubuntu 20.04禁用或者移除 cloud-init
1、禁用cloud-init 这是最简单最安全的方法,在 /etc/cloud 目录下创建 cloud-init.disabled 文件重启后生效。删除该文件就可以恢复 # 创建cloud-init.disabled文件 sudo touch /etc/cloud/cloud-init.disabled # 重启 reboot 2、移除 cloud-init 软件包及文件夹…...

DevOps开发运维简述
DevOps平台是一套集成的解决方案,旨在协调软件开发(Development)和信息技术运维(Operations)。它促进跨功能团队合作,实现自动化流程,确保持续集成与持续交付(CI/CD)。 一…...
C++之list的使用
在C中,std::list 是一个双向链表,它允许在列表的任何位置高效地插入和删除元素。以下是一些基本的使用方式: 包含头文件 要使用 std::list,首先需要包含头文件 <iostream> 和 /list>。 #include <iostream> #in…...
nginx配置代理地址
1,配置19上的代理 location /jmis/ { alias D:/images/; autoindex on; sendfile on; } 2.在18服务器上访问19的图片。18服务器nginx代理 proxy_set_header 指令用于在发送给后端服务器的请求中添加或修改指定的HTTP头信息。 proxy_p…...

国际版JAVA同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
一、数据中心 总用户数今日接单数量今日新增今日收入本月新增本月收入本年新增本年收入 二、用户中心 全部用户普通用户师傅用户推广员用户 三、财务中心 提现管理收入统计提现统计充值统计充值记录保证金管理平台收入统计 四、首页装修 轮播图分享图语音播报配置 五…...

AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
2024-10-31,由清华大学和北京大学共同创建的AndroidLab数据集,为安卓自主代理的训练和评估提供了一个包含操作环境、行动空间和可复现基准的系统框架,这对于推动安卓代理技术的发展具有重要意义。 数据集地址:Android Instruct|A…...
Java--正则表达式入门指南
正则表达式(Regular Expression)是一种用于匹配字符串中字符模式的工具。在Java中,正则表达式的使用主要依赖于java.util.regex包,其中最重要的两个类是Pattern和Matcher。今天将探讨正则表达式的基础概念、书写规则、常用方法&am…...
阿里云服务器 篇十(加更二):自动定时备份CSDN博客内容:更新文件最后修改时间,以在个人博客正确展示最近更新
文章目录 系列文章核心修改更新后的核心代码使用方法系列文章 阿里云服务器 篇一:申请和初始化 阿里云服务器 篇二:搭建静态网站 阿里云服务器 篇三:提交搜索引擎收录 阿里云服务器 篇四:404页面模板 阿里云服务器 篇五:短链服务网站 阿里云服务器 篇六:GitHub镜像网站 …...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...

以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...
uni-app 项目支持 vue 3.0 详解及版本升级方案?
uni-app 支持 Vue 3.0 详解及升级方案 一、uni-app 对 Vue 3.0 的支持现状 uni-app 从 3.0 版本 开始支持 Vue 3.0,主要变化包括: 核心框架升级: 基于 Vue 3.0 的 Composition API 和 Options API 双模式支持提供 vueuse/core 等组合式 API…...