「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镜像网站 …...
AI部署风险评估:94%准确率为何引发生产灾难
1. 这不是AI的失败,是风险认知体系的塌方 “94%准确率”——这个数字像一枚镀金勋章,挂在每个技术团队的功劳簿上。它出现在季度汇报PPT第一页,写进投资人尽调材料的核心指标栏,甚至被印在内部庆功蛋糕的奶油裱花里。可当这枚勋章…...
如何用免费纹理打包器优化游戏性能:5个实战技巧提升加载速度
如何用免费纹理打包器优化游戏性能:5个实战技巧提升加载速度 【免费下载链接】free-tex-packer Free texture packer 项目地址: https://gitcode.com/gh_mirrors/fr/free-tex-packer Free Texture Packer 是一款完全开源的精灵表生成工具,专门为游…...
TI MSPM0G3105-Q1汽车MCU实战解析:从核心特性到硬件设计
1. 项目概述:为什么是MSPM0G3105-Q1?在汽车电子和工业控制领域摸爬滚打十几年,我经手过的MCU型号少说也有几十款。每次启动一个新项目,选型都是头等大事,它直接决定了后续开发的难易度、系统的稳定性和最终产品的成本。…...
用强化学习训练 Agent:从随机尝试到精通复杂任务
用强化学习训练 Agent:从随机尝试到精通复杂任务 副标题: 深度解析马尔可夫决策过程、Q学习、DQN、PPO四大核心支柱,附从OpenAI Gym经典项目实战与Atari Pong完整训练代码 第一部分:引言与基础 (Introduction & Foundation) 1…...
ChatGPT高质量输出的隐藏开关:基于IEEE写作标准的11项自动校验清单(附可运行Python验证脚本)
更多请点击: https://kaifayun.com 第一章:ChatGPT高质量输出的底层逻辑与认知前提 ChatGPT生成高质量响应并非依赖“魔法”,而是建立在三个核心支柱之上:大规模语言建模的统计涌现能力、人类反馈强化学习(RLHF&#…...
不只是打驱动:深入解读Intel Arc显卡在Linux下的RBAR技术及其对AI性能的实际影响
深入解析Intel Arc显卡RBAR技术:Linux环境下的AI性能优化实践 当一块Intel Arc显卡插入Linux工作站时,大多数用户的第一反应是寻找驱动安装指南。但真正影响AI推理性能的关键,往往隐藏在PCIe总线的一个名为RBAR(Resizable Base Ad…...
EVE-NG抓包踩坑实录:手把手教你配置Wireshark wrapper.bat,解决密码错误报错
EVE-NG抓包故障深度解析:从密码错误到Wireshark完美联动的全流程指南 在虚拟网络实验室的构建中,EVE-NG无疑是工程师们的首选平台。然而当我们需要进行深度报文分析时,Wireshark与EVE-NG的联动配置却常常成为技术道路上的"拦路虎"…...
从MySQL迁移到GaussDB:一个后端开发者的初体验与核心操作对比(含表、索引、视图、联表查询)
从MySQL迁移到GaussDB:一个后端开发者的初体验与核心操作对比 作为一名长期使用MySQL的后端开发者,第一次接触GaussDB时既兴奋又忐忑。兴奋的是有机会体验国产数据库的强大性能,忐忑的是不知道这个"新朋友"会不会带来意想不到的挑战…...
BilibiliDown:3分钟掌握B站视频批量下载的终极解决方案
BilibiliDown:3分钟掌握B站视频批量下载的终极解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…...
信贷系统压测:用JMeter实现状态流并发与资金流仿真
1. 为什么信贷业务压测不能只跑个登录接口就交差?我第一次接手某城商行信贷系统压测时,信心满满地用JMeter搭了个500线程的“高并发”脚本,模拟用户登录查看额度。结果压测报告一出来,TPS稳定在320,平均响应时间180ms&…...




