鸿蒙OpenHarmony实战开发-MiniCanvas

news2024/11/24 3:31:30

介绍

基于OpenHarmony的Cavas组件封装了一版极简操作的MiniCanvas,屏蔽了原有Canvas内部复杂的调用流程,支持一个API就可以实现相应的绘制能力,该库还在继续完善中,也欢迎PR。

使用说明

1.添加MiniCanvas依赖

在项目entry目录执行如下命令安装MiniCanvas库:

npm install git+https://gitee.com/ark-ui/MiniCanvas.git

2.引入MiniCanvas

import { MiniCanvas, Paint, ICanvas } from '@ohos/mini_canvas'

3.使用MiniCanvas

@Entry @Component struct TestMiniCanvas {
  build() {
    Column() {
      MiniCanvas({
        onDraw: (canvas) => {
          
        }
      })
    }
    .size({width: "100%", height: "100%"})
  }
}

4.MiniCanvas绘制

// import { MiniCanvas, Paint, ICanvas } from '@ohos/mini_canvas'
// 源码方式引入
import { MiniCanvas, Paint } from "./mini_canvas"

@Entry @Component struct TestMiniCanvas {
  build() {
    Column() {
      MiniCanvas({
        // 在onDraw()方法内执行绘制
        onDraw: (canvas) => {
          // 创建画笔
          let paint = new Paint()

          // 绘制直线
          paint.setColor("#FF0000");
          paint.setStrokeWidth(5);
          canvas.drawLine(10, 10, 280, 10, paint);

          // 绘制圆以及圆环
          canvas.drawCircle(50, 50, 25, paint);
          paint.setStroke(true);
          paint.setStrokeWidth(3);
          canvas.drawCircle(250, 50, 25, paint);

          // 绘制椭圆以及椭圆环
          paint.setStroke(false);
          canvas.drawOval(20, 100, 150, 50, paint)
          paint.setStroke(true);
          paint.setColor(Color.Pink.toString())
          canvas.drawOval(190, 100, 150, 50, paint)

          // 绘制矩形
          paint.setStroke(false)
          canvas.drawRect(20, 180, 150, 50, paint)
          paint.setStroke(true)
          paint.setStrokeWidth(5)
          canvas.drawRect(190, 180, 150, 50, paint)

          // 绘制圆角矩形
          paint.setStroke(false);
          canvas.drawRoundRect(20, 250, 150, 50, 10, paint)
          paint.setStroke(true);
          canvas.drawRoundRect(190, 250, 150, 50, 10, paint)


          // 绘制圆弧
          canvas.drawArc(80, 330, 40, 0, 135, paint);
          paint.setStroke(false);
          canvas.drawArc(250, 330, 40, 0, 135, paint);

          // 绘制图片
          let bitmap = new ImageBitmap("pages/test.jpg")
          canvas.drawImage(bitmap, 10, 10, 800, 600, 20, 400, 320, 160, paint)
        },
        // 设置画布的属性
        attribute: {
          id: "mini_canvas",
          width: "100%",
          height: "100%",
          background: "#ffffff",
          clickListener: (event) => {
            console.log("onClicked: " + JSON.stringify(event));
          },
          touchListener: (event) => {
            console.log("onTouched: " + JSON.stringify(event));
          }
        },
      })
    }
    .size({width: "100%", height: "100%"})
  }
}

运行结果

sample

参与贡献

  1. Fork 本仓库
  2. 新建 xxx 分支
  3. 提交代码
  4. 新建 Pull Request

如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程》以及《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

OpenHarmony APP开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

《鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1649414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot3.x集成Disruptor4.0

Disruptor介绍 Disruptor是一个高性能内存队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年&…

C++手写协程项目(协程实现线程结构体、线程调度器定义,线程挂起函数、线程切换函数、线程恢复函数、线程结束函数、线程结束判断函数,模块测试)

协程结构体定义 之前我们使用linux下协程函数实现了线程切换,使用的是ucontext_t结构体,和基于这个结构体的四个函数。现在我们要用这些工具来实现我们自己的一个线程结构体,并实现线程调度和线程切换、挂起。 首先我们来实现以下线程结构体…

【iOS】——浅析CALayer

文章目录 一、CALayer介绍二、UIview与CALayer1.区别2.联系 三、CALayer的使用1.初始化方法2.常用属性 四.CALayer坐标系1.position属性和anchorPoint属性2.position和anchorPoint的关系3.position、anchorPoint和frame的关系 五、CALayerDelegate六、CALayer绘图机制1.绘图流程…

官方教程来啦!上手体验YashanDB主备部署、同步延迟和自动切换能力

在上一篇深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术中,我们深入探讨了YashanDB高可用的架构设计原理和关键技术,本文将聚焦于实践操作,快速体验YashanDB的主备高可用能力。 概要 YashanDB提供了不同部署形…

C++程序设计教案

文章目录: 一:软件安装环境 第一种:vc2012 第二种:Dev-C 第三种:小熊猫C 二:语法基础 1.相关 1.1 注释 1.2 换行符 1.3 规范 1.4 关键字 1.5 ASCll码表 1.6 转义字符 2.基本框架 2.1 第一种&…

如果insightface/instantID安装失败怎么办(关于InsightFaceLoader_Zho节点的报错)

可能性有很多,但是今天帮朋友解决问题的时候又收集了一种新的思路。 首先,可以先按照这篇文章里边提到的方法去安装: 【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂_insightface如何安装-CSDN博客 其次,…

解决Python中的 `ModuleNotFoundError: No module named ‘fcmeans‘` 错误

ModuleNotFoundError: No module named fcmeans 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误如何解决这个错误fcmeans 库简介应用实例 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误 在进行数据科学或机器学习项目时,…

Linux内核之获取文件系统超级块:sget用法实例(六十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

大眼橙C1 Air投影仪:千元预算内的明智之选

在科技日新月异的今天,投影仪已经不再是会议室或教室的专属,而是越来越多地走入了寻常百姓家。家庭影院的概念越来越流行,尤其在都市人之间逐渐成为一股风尚。市场上投影仪非常多,如何选到一台合适的投影仪也成为困扰广大用户的一…

了解TMS运输管理系统,实现物流高效运转

TMS运输管理系统(Transportation Management System)是一种集成物流和信息技术的解决方案,通过优化运输流程、实时跟踪货物信息和自动化管理操作,提高物流效率,降低运营成本,实现高效运输。 TMS运输管理系…

软件设计师-重点的构造型设计模式

一、桥接模式(Bridge): 意图: 将抽象部分与其实现部分分离,使它们都可以独立地变化。 结构: 适用性: 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是…

探索大模型能力--prompt工程

1 prompt工程是什么 1.1 什么是Prompt? LLM大语言模型终究也只是一个工具,我们不可能每个人都去训一个大模型,但是我们可以思考如何利用好大模型,让他提升我们的工作效率。就像计算器工具一样,要你算10的10倍&#x…

【计算机网络】计算机网络的性能指标

计算机网络的性能指标被用来从不同方面度量计算机网络的性能。常用的八个计算机网络性能指标:速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率。 一.速率 (1) 数据量 比特(bit,记为小写b)是计算机中数据量的基…

JavaWEB 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型,可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入(Dependency Injection)、面向切面编程(Aspect-Or…

c++ 线程交叉场景试验

1.需求 1.处理一个列表的数据,要求按照列表的数据处理10个数据 2.可以使用多线程处理,但是针对每个线程,1~10的处理顺序不能变。 3.每个数据的处理必须原子,即只有一个线程可以针对某个数据进行处理,但是10个数据是可…

2024年CSC公派联合培养博士项目申报即将开始~

一、选派计划 联合培养博士研究生面向全国各博士学位授予单位选拔。 联合培养博士研究生的留学期限、资助期限为6-24个月。留学期限应根据拟留学单位学制、外方录取通知(或正式邀请信)中列明的留学时间确定。个人申报的资助期限应不超过留学期限&#…

79、贪心-跳跃游戏II

思路: 首先理解题意:从首位置跳最少多少次到达末尾。 第一种:使用递归,将所有跳转路径都获取到进行求出最小值。 第二种:使用动态规划,下一次最优取决上一次的最优解 第三针:贪心&#xff…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

Spring Cloud 整合Sentinel

1、引入依赖 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <…

0508_IO2

练习&#xff1a; 将一张图片修改为德国国旗 1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <sys/types.h>5 #include <unistd.h>6 #include <sys/stat.h>7 #include <fcntl.h>8 #include <pthrea…