鴻蒙開發:了解Canvas繪制

前言

本文基于Api13

系統的組件無法滿足我們的需求,這種情況下就不得不自己自定義組件,除了自定義組合組件,拓展組件,還有一種方式,那就是完全的自繪制組件,這種情況,常見的場景有,比如金融軟件中的股票行情圖,基金折線圖,當然了也有其它的需要高度繪制的地方,鴻蒙開發中,和其它的語言類似,都是采用Canvas畫布進行繪制,但是繪制的方式更趨向于Web前端中的方式。

Canvas是一個畫布,并不能提供繪制的能力,但是它作為一個載體,承擔了繪制的容器,目前實現繪制,提供了有兩個對象,一個是DrawingRenderingContext,另一個是CanvasRenderingContext2D,本篇文章,暫不涉及概述這兩個對象,我們先來了解一下繪制的基礎知識。

Canvas對象,在Api12之后,增加了一個可以AI分析選項參數ImageAIOptions,通過此項可配置分析類型或綁定一個分析控制器。

(context: CanvasRenderingContext2D | DrawingRenderingContext, imageAIOptions: ImageAIOptions): CanvasAttribute;

當然,也有一個支持AI分析的屬性enableAnalyzer,不過需要搭配CanvasRenderingContext2D中的StartImageAnalyzer和StopImageAnalyzer一起使用。

繪制要求

在繪制之前,我們需要注意,必須等待Canvas組件初始化完成時,也就是在onReady方法中進行繪制。

先來一個簡單案例,繪制一個半徑為100的圓。

@Entry
@Component
struct DemoPage {private context: DrawingRenderingContext = new DrawingRenderingContext()build() {Canvas(this.context).width("100%").height("100%").onReady(() => {this.context.canvas.drawCircle(200, 200, 100)this.context.invalidate()})}
}

運行后,可以看到效果如下,默認是黑色。

?

DrawingRenderingContext介紹

DrawingRenderingContext是一個用于繪制的工具,它可以在Canvas畫布組件上進行自由的繪制,比如矩形、文本、圖片等等,有一個默認參數LengthMetricsUnit,主要是設置長度屬性單位,有兩個值可以選擇,DEFAULT和PX,前者用于描述以默認的vp像素單位為單位的長度,后者用于描述以px像素單位為單位的長度。

有三個屬性或方法可供選擇,參數如下:

名稱

類型

說明

size

Size

Context大小的寬和高。

canvas

Canvas

繪制模塊的Canvas對象,具體描述見繪制模塊中的Canvas對象。

invalidate

無參

使組件無效,觸發組件的重新渲染。

CanvasRenderingContext2D介紹

CanvasRenderingContext2D和DrawingRenderingContext一樣,都是一個繪制工具,都可以進行繪制一些常見的矩形、文本、圖片等,和DrawingRenderingContext不同的是,它的屬性更加豐富,而且兼容其自身所帶的功能,所以,在繪制元素上,推薦使用CanvasRenderingContext2D。

RenderingContextSettings參數主要用來配置CanvasRenderingContext2D對象的參數。

constructor(settings?: RenderingContextSettings);

Api12之后新增了一個參數LengthMetricsUnit,主要用來用來配置CanvasRenderingContext2D對象的單位模式。

constructor(settings?: RenderingContextSettings, unit?: LengthMetricsUnit);

使用CanvasRenderingContext2D簡單繪制一個矩形:

@Entry
@Component
struct DemoPage {private settings: RenderingContextSettings = new RenderingContextSettings(true)private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Canvas(this.context).width('100%').height('100%').onReady(() => {this.context.fillRect(0, 0, 100, 100)})}
}

相關總結

本文主要簡單的概述了Canvas繪制的基礎知識,大家作為一個簡單的了解即可,下面的幾篇文章,我們會對相關的繪制再做進一步的分析,首先可以先做一個簡單的總結:DrawingRenderingContext在使用上遠遠沒有CanvasRenderingContext2D使用起來方便,比如在修改畫筆的粗細,顏色等屬性上,就可以體現出來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74947.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux筆記】進程間通信——命名管道

🔥個人主頁🔥:孤寂大仙V 🌈收錄專欄🌈:Linux 🌹往期回顧🌹:【Linux筆記】進程間通信——匿名管道||進程池 🔖流水不爭,爭的是滔滔不 一、命名管道…

Spring項目中使用EasyExcel實現Excel 多 Sheet 導入導出功能(完整版)

Excel 多 Sheet 導入導出功能完整實現指南 一、環境依賴 1. Maven 依賴 <!-- EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version> </dependency>…

全流程剖析需求開發:打造極致貼合用戶的產品

全流程剖析需求開發&#xff1a;打造極致貼合用戶的產品 一、需求獲取&#xff08;一&#xff09;與用戶溝通1.面談2.問卷調查3.會議討論 &#xff08;二&#xff09;觀察用戶工作&#xff08;三&#xff09;收集現有文檔 二、需求分析&#xff08;一&#xff09;提煉關鍵需求&…

SQL語句及其應用(中)(DQL語句之單表查詢)

SQL語句的定義: 概述: 全稱叫 Structured Query Language, 結構化查詢語言, 主要是實現 用戶(程序員) 和 數據庫軟件(例如: MySQL, Oracle)之間交互用的. 分類: DDL: 數據定義語言, 主要是操作 數據庫, 數據表, 字段, 進行: 增刪改查(CURD) 涉及到的關鍵字: create, drop, …

5000元組裝一臺本地運行中、小模型主機,參考配置 (運行DeepSeek、Qwen)

5000元組裝一臺本地運行中、小模型主機&#xff0c;參考配置 &#xff08;運行DeepSeek、Qwen) 5000元中、小模型主機 DeepSeek、Qwen 各精度模型推薦啟動方式 模型名稱 參數量 精度 模型大小 推薦運行模式 DeepSeek R1 7b Q4 5 GB LM Studio純GPU 14b Q4 9 GB LM…

【新手初學】SQL注入getshell

一、引入 木馬介紹&#xff1a; 木馬其實就是一段程序&#xff0c;這個程序運行到目標主機上時&#xff0c;主要可以對目標進行遠程控制、盜取信息等功能&#xff0c;一般不會破壞目標主機&#xff0c;當然&#xff0c;這也看黑客是否想要搞破壞。 木馬類型&#xff1a; 按照功…

Containerd+Kubernetes搭建k8s集群

虛擬機環境設置&#xff0c;如果不是虛擬機可以忽略不看 1、安裝配置containerd 1.1 添加 Kubernetes 官方倉庫 安裝cri-tools的時候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…

應用待機分組管控是啥

1. 應用待機群組是啥&#xff1f; Android 9 引入了一個新功能&#xff0c;叫應用待機群組。簡單來說&#xff0c;就是根據你最近使用應用的頻率和時間&#xff0c;系統會把應用分成不同的“群組”。每個群組的應用能用的系統資源不一樣&#xff0c;比如后臺任務、鬧鐘、網絡請…

C/C++后端開發面經

字節跳動 客戶端開發 實習 一面(50min) 自我介紹是否愿意轉語言,是否只愿意搞后端選一個項目來詳細談談HTTP和HTTPS有什么區別?談一下HTTPS加密的具體過程&#xff1a; 非對稱加密 對稱加密 證書認證的方式 非對稱加密是為了保證對稱密鑰的安全性。 對稱…

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】A題解題全流程(持續更新)

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】A題解題全流程-思路&#xff08;持續更新&#xff09; 寫在前面&#xff1a; 1、A題、C題將會持續更新&#xff0c;陸續更新發布文章 2、賽題交流咨詢Q群&#xff1a;1037590285 3、全家桶依舊包含&#xff1a; 代碼、…

如何讓 history 記錄命令執行時間?Linux/macOS 終端時間戳設置指南

引言:你真的會用 history 嗎? 有沒有遇到過這樣的情況:你想回顧某個重要命令的執行記錄,卻發現 history 只列出了命令序號和內容,根本沒有時間戳?這在運維排查、故障分析、甚至審計時都會帶來極大的不便。 想象一下,你在服務器上誤刪了某個文件,但不知道具體是幾點執…

Redis緩存異常場景深度解析:穿透、擊穿、雪崩及終極解決方案

一、引言 在高并發系統中&#xff0c;緩存承擔著流量洪峰的削峰填谷作用。然而當緩存層出現異常時&#xff0c;可能引發數據庫級聯崩潰&#xff0c;造成系統癱瘓。本文將深入剖析緩存穿透、緩存擊穿、緩存雪崩三大典型問題&#xff0c;并提供企業級解決方案。文章包含7種防御策…

Scala 之 正則

regex 函數提取 import scala.util.matching.Regex// 輸入表達式 val expression "[a#0, round(a#0, 0) AS round(a, 0)#1, abs(a#0) AS abs(a)#2, len(cast(a#0 as string)) AS len(a)#3]"// 定義一個正則表達式來提取函數名稱 val functionPattern: Regex &quo…

CI/CD-Jenkins安裝與應用

CI/CD-Jenkins安裝與應用 Docker安裝Jenkins docker-compose.yaml version: "3.8" # # 自定義網絡配置 # networks:cicd:driver: bridgeservices:jenkins:# 盡量使用新版本的Jenkins, 低版本的Jenkins的有些插件使用不了# jenkins/jenkins:lts-jdk17是長期支持版…

驗證Linux多進程時間片切換的程序

?? 一、軟件需求 在同時運行多個CPU密集型進程時&#xff0c;需采集以下統計信息&#xff1a; 當前運行在邏輯CPU上的進程ID每個進程的運行進度百分比 實驗程序設計要求&#xff1a; 1. 命令行參數 參數說明示例值n并發進程數量3total總運行時長&#xff08;毫秒&…

IvorySQL:兼容Oracle數據庫的開源PostgreSQL

今天給大家介紹一款基于 PostgreSQL 開發、兼容 Oracle 數據庫的國產開源關系型數據庫管理系統&#xff1a;IvorySQL。 IvorySQL 由商瀚高軟件提供支持&#xff0c;主要的功能特性包括&#xff1a; 完全兼容 PostgreSQL&#xff1a;IvorySQL 基于 PostgreSQL 內核開發&#xf…

樹莓派超全系列文檔--(13)如何使用raspi-config工具其二

如何使用raspi-config工具其二 raspi-configPerformance optionsOverclockGPU memoryOverlay file systemFan Localisation optionsLocaleTime zoneKeyboardWLAN country Advanced optionsExpand filesystemNetwork interface namesNetwork proxy settingsBoot orderBootloader…

QT音樂播放器(1):數據庫保存歌曲

實現功能&#xff1a;用數據庫保存本地導入和在線搜索的歌曲記錄 目錄 一. 保存本地添加的歌曲 1. 使用QSettings &#xff08;1&#xff09;在構造函數中&#xff0c;創建對象。 &#xff08;2&#xff09;在導入音樂槽函數中&#xff0c;保存新添加的文件路徑&#xff0c…

自動化發布工具CI/CD實踐Jenkins常用工具和插件的使用

1、安裝常用工具 名稱版本備注jdkjava8代碼打包所需git1.8.3.1maven3.6.3注意配置私服內容nvm0.39.3多Node.js環境管理工具Node.jsv14.18.0 / v16.17.1包管理工具yarn1.22.15包管理工具 1.1 安裝jdk Jenkins 需要使用java11 及以上&#xff0c;但是代碼打包依賴jdk8&#xff…

shared_ptr和 weak_ptr的詳細介紹

關于 shared_ptr 和 weak_ptr 的詳細介紹及使用示例&#xff1a; 1. shared_ptr&#xff08;共享所有權智能指針&#xff09; 核心特性 引用計數&#xff1a;記錄當前有多少個 shared_ptr 共享同一個對象。自動釋放&#xff1a;當引用計數歸零時&#xff0c;自動釋放對象內存…