大家上午好,今天分享一下仓颉开发语言实现的画板案例。

最近总是有同学说我写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仓颉开发语言实现画板案例的更多相关文章

  1. KOTLIN开发语言文档(官方文档) -- 2.基本概念

    网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2.   基本概念 2.1.  基本类型 从可以在任何变量处理调用成员函数和属性 ...

  2. KOTLIN开发语言文档(官方文档) -- 入门

    网页链接:https://kotlinlang.org/docs/reference/basic-syntax.html 1.   入门 1.1.  基本语法 1.1.1.   定义包 包说明应该在源 ...

  3. 开发语言性能对比,C++、Java、Python、LUA、TCC

    一直想做开发语言性能对比,刚好有时间都做了给大家参考一下, 编译类:C++和Java表现还不错 脚本类:TCC脚本动态运行C语言,性能比其他脚本快好多... 想玩TCC的同学下载测试包,TCC目录下修 ...

  4. 【转载】谷歌酝酿将苹果Swift作为安卓APP主要开发语言

    TNW中文站 4月8日报道 安卓操作系统的软件开发语言是Java,而在过去几年中,有关Java的版权,谷歌(微博)和甲骨文之间发生了长期的诉讼.最新外媒消息称,谷歌正在考虑将苹果开发的Swift作为未 ...

  5. Java在Web开发语言上败给了PHP

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  6. 转 Eric Raymond对于几大开发语言的评价

    原文见:http://blog.jobbole.com/79421/ [译注]:Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大 ...

  7. 幼谈苹果新开发语言:Swift和苹果的用心

    今天是个值得纪念的日子:因为苹果的WWDC大会.苹果的每次WWDC(全球开发者大会)举行都让我们像打了肾上腺素这么兴奋.幸福.惊叹.震撼.深思. 今年也不例外,最关键的是苹果带来了它的一门新开发语言: ...

  8. 基于lua的网页脚本开发语言cgilua(转)

    这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个 ...

  9. JAVA开发语言基础

    很多时候我们都不知道,为什么android最开始要用java作为基础语言 看看知乎上都是怎么回答的 为什么java最初成为android开发的基础语言 ------------------------ ...

  10. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

随机推荐

  1. AOT编译Avalonia应用:StarBlog Publisher项目实践与挑战

    前言 最近我使用 Avalonia 开发了一个文章发布工具,StarBlog Publisher. Avalonia 是一个跨平台的 UI 框架,它可以在 Windows.Linux 和 macOS ...

  2. 多态的前提--java进阶day02

    1.多态的前提条件 第一点和第二点都很好理解,第三点父类引用指向子类对象是什么意思?以下图进行讲解 我们以前的写法,如下图,叫做子类引用指向子类 那父类引用呢?就是把左边换成父类Animal即可 因为 ...

  3. Ink 和 TravisCI 更配哦

    前言 去年还是前年,无意间接触到ink,看到是用go写的,非常小巧和精简,于是乎fork了下,还整了个供ink用的docker镜像``. 不过那时候热衷于折腾博客...结果也没折腾出什么来, 今天整理 ...

  4. pandas 将excle两行或多行文本合并为一行

    原有excle 目的: # j加载另一份数据源 import pandas as pd import xlrd import time from xlutils.copy import copy fr ...

  5. 工具 | Hashcat

    0x00 简介 Hashcat是一款强大的密码破解工具. 下载地址 Hashcat下载: Hashcat下载 0x01 功能说明 直接破解 组合攻击 掩码暴力破解 混合攻击 联合攻击 注:仅供安全研究 ...

  6. 【记录】ChatGPT|使用技巧(更新至2023年2月8日)

      昨天,2022年12月13日,在下午和晚上,ChatGPT 就开始因为请求过多而写到一半就崩溃,出现network error,可见它的关注度确实是越来越可观了.   正好最近世界杯,有博客活动, ...

  7. 【FAQ】HarmonyOS SDK 闭源开放能力 —Share Kit(2)

    1.问题描述: 在app相册点击图片分享,分享模态框能改变样式吗? 解决方案: 分享模态框不能只展示下半部分,分享面板由四部分构成,其中内容预览区提供两种模板供应用选择,参考:https://deve ...

  8. 用python标准库smtplib来发QQ邮件及Django中发送邮件

    1.QQ邮箱设置 点击QQ邮箱账号,进入后,开启smtp服务许可: 点击"生产授权码",在手机上发送相应的短信,得到授权码.[注意授权码之间没有空格] 2.典型代码块   impo ...

  9. 安装Scikit-learn 0.24.2版本

    安装Scikit-learn 0.24.2版本 Anaconda 安装scikit-learn是0.19版本,目前最新版本是0.24.2,之前的版本与现在的版本之间差距还是比较大,因此有必要对scik ...

  10. Palindrome Number——LeetCode进阶路⑨

    //原题链接https://leetcode.com/problems/palindrome-number/ 题目描述 Determine whether an integer is a palind ...