HarmonyOS NEXT仓颉开发语言实现画板案例
大家上午好,今天分享一下仓颉开发语言实现的画板案例。
最近总是有同学说我写ArkTS冒充仓颉,为了自证清白,截图给大家看一下,确实是仓颉文件:

仓颉提供了画布组件Canvas,我们所有的绘制工作都要在画布上进行,所以首先在页面添加一个足够大的画布组件:
Canvas(this.context)
.backgroundColor(0xffff00)
.width(100.percent)
.height(100.percent)
看到上面的代码,大家可能会问this.context是什么,幽蓝君将它比作画笔,使用画笔在画布上作画,context可以绘制图形、文本、图片等内容。画笔的样式是可以修改的,比如粗细、颜色等等:
var settings: RenderingContextSettings = RenderingContextSettings(antialias: true)
var context: CanvasRenderingContext2D = CanvasRenderingContext2D(this.settings)
var path2Db: Path2D = Path2D()
protected open func onPageShow(){
context.lineWidth(5)
context.strokeStyle(0x0000ff)
}
今天我们做的是让画笔跟随我们触摸过的轨迹绘制曲线。

要实现这个需求,首先我们需要知道绘制国的轨迹坐标,才能在画布上准确的绘制。
为了让绘制更加准确,我使用了三次贝塞尔曲线,这样我需要记录下至少两个点,然后将这个点的中点也传入贝塞尔曲线的坐标。
触摸滑动事件可以使用onTouch,onTouch的事件有几种类型,如Down、Move等,在仓颉中对类型我使用了非常规的判断方式:
.onTouch({e:TouchEvent =>
var pointX = e.touches[0].x;
var pointY = e.touches[0].y;
if(e.eventType.toString() == 'Move'){
let curX = (pointX + this.pointX1)/Float64(2)
let curY = (pointY + this.pointY1)/Float64(2)
this.path2Db.bezierCurveTo(this.pointX1,this.pointY1,this.pointX2,this.pointY2,curX,curY)
this.pointX1 = pointX
this.pointY1 = pointY
this.pointX2 = curX
this.pointY2 = curY
this.context.stroke(this.path2Db)
}else if(e.eventType.toString() == 'Down'){
this.path2Db.moveTo(e.touches[0].x, e.touches[0].y);
this.pointX1 = pointX
this.pointY1 = pointY
this.pointX2 = pointX
this.pointY2 = pointY
}
})
实现绘制曲线后,可以使用clearRect方法实现对画布的清空。
Button('清空').onClick({e =>
this.context.clearRect(0, 0, 3000, 3000)
})
这样一个简单的画板效果就实现啦,感谢阅读。##HarmonyOS语言##仓颉##休闲娱乐#
HarmonyOS NEXT仓颉开发语言实现画板案例的更多相关文章
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
- KOTLIN开发语言文档(官方文档) -- 入门
网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1. 入门 1.1. 基本语法 1.1.1. 定义包 包说明应该在源 ...
- 开发语言性能对比,C++、Java、Python、LUA、TCC
一直想做开发语言性能对比,刚好有时间都做了给大家参考一下, 编译类:C++和Java表现还不错 脚本类:TCC脚本动态运行C语言,性能比其他脚本快好多... 想玩TCC的同学下载测试包,TCC目录下修 ...
- 【转载】谷歌酝酿将苹果Swift作为安卓APP主要开发语言
TNW中文站 4月8日报道 安卓操作系统的软件开发语言是Java,而在过去几年中,有关Java的版权,谷歌(微博)和甲骨文之间发生了长期的诉讼.最新外媒消息称,谷歌正在考虑将苹果开发的Swift作为未 ...
- Java在Web开发语言上败给了PHP
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- 转 Eric Raymond对于几大开发语言的评价
原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大 ...
- 幼谈苹果新开发语言:Swift和苹果的用心
今天是个值得纪念的日子:因为苹果的WWDC大会.苹果的每次WWDC(全球开发者大会)举行都让我们像打了肾上腺素这么兴奋.幸福.惊叹.震撼.深思. 今年也不例外,最关键的是苹果带来了它的一门新开发语言: ...
- 基于lua的网页脚本开发语言cgilua(转)
这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...
- JAVA开发语言基础
很多时候我们都不知道,为什么android最开始要用java作为基础语言 看看知乎上都是怎么回答的 为什么java最初成为android开发的基础语言 ------------------------ ...
- 大数据全栈式开发语言 – Python
前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...
随机推荐
- 我对TamperMonkey的不满-更新中
我认为我的电脑上的TamperMonkey插件的值得考虑的不足: 没有提供一个把脚本最小化的功能 不能编辑热键 脚本icon不能使用svg 没有提供一种很好的能够区分别人的脚本和自己的脚本的方式,自己 ...
- xe10.3+paserver在Ubuntu下运行错误
xe.3的paserver在Ubuntu下执行呈现乱七八糟的错误提示. 原因:Ubuntu的版本和paserver编译的环境不一致. 注意:使用ARM64的版本.如ubuntu-18.04.2-des ...
- 端口telnet不通排查过程
现状 简单描述下最近在做啥,我手里维护的一些系统的线上服务器,还在使用centos7,7.3/7.6/7.9都有,运维侧选定的替换系统是openEuler20.03-LTS-SP1.按理说,运维直接在 ...
- 💻开源项目介绍-NewsNow-优雅的实时新闻聚合平台
news.zktww.vip 引言 在信息洪流中,如何优雅地获取新闻? 在当今信息爆炸的时代,我们每天需要在微博.知乎.Twitter.GitHub等平台间频繁切换,才能捕捉到最新的热点动态. New ...
- python,设置windows系统时间
老笔记本纽扣电池没电了,每次拔掉电源再重新开机时间就对不上了,然后写个python脚本开机后执行对时吧 脚本直接网上复制的,比较简单,貌似时访问www.baidu.com获取头信息里的时间,然后设置为 ...
- gRPC与RPC的差异
在微服务架构日益流行的今天,远程过程调用(RPC)技术成为连接各个服务的重要桥梁.本文将详细比较传统RPC与谷歌开发的gRPC框架,通过具体示例展示它们在请求处理.数据格式.性能等方面的差异. 基本概 ...
- MySQL 中 AUTO_INCREMENT 列达到最大值时会发生什么?
在MySQL中,AUTO_INCREMENT列用于自动生成唯一的数字值,通常用于主键.当AUTO_INCREMENT列达到最大值时,会发生以下几种情况,具体取决于列的数据类型以及MySQL的配置. 对 ...
- EFCore Study(番外1)——单向导航属性
一.单向导航属性场景 1.比如公司OA系统有很多相关的审批流程,比如离职(Leave).请假(relex).加班,每个流程都有多级审批人,每个审批人都是User 一个人(User)--多个审批流程的多 ...
- EFCore学习(二)——添加,修改,删除,查询操作及将EFCore语句编译成sql
实质: EFCore的底层实际是将关于实体类的的操作编译成sql,然后让ado.net去执行 在Program.cs里使用SchoolContext 说明:需要SchoolContext.cs声明实体 ...
- LocalDateTime时间工具之“2023-01-18T23:59:59.999999999”转“yyyy-MM-dd HH:mm:ss”
LocalDateTime时间工具之"2023-01-18T23:59:59.999999999"转"yyyy-MM-dd HH:mm:ss" 代码 Local ...