当前位置: 首页 > news >正文

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 = pointXthis.pointY1 = pointYthis.pointX2 = curXthis.pointY2 = curYthis.context.stroke(this.path2Db)}else if(e.eventType.toString() == 'Down'){this.path2Db.moveTo(e.touches[0].x, e.touches[0].y);this.pointX1 = pointXthis.pointY1 = pointYthis.pointX2 = pointXthis.pointY2 = pointY}})

实现绘制曲线后,可以使用clearRect方法实现对画布的清空。

Button('清空').onClick({e =>  this.context.clearRect(0, 0, 3000, 3000)})

这样一个简单的画板效果就实现啦,感谢阅读。​​#​​​​#HarmonyOS语言​​##仓颉##休闲娱乐#

http://www.lryc.cn/news/575833.html

相关文章:

  • fish安装node.js环境
  • 【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件
  • Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory
  • 车联网网络安全渗透测试:深度解析与实践
  • 商品中心—15.库存分桶扣减的技术文档
  • 一款被我拿来处理图片和视频的免费环保软件
  • Web基础关键_003_CSS(一)
  • 小程序学习笔记:加载效果、上拉加载与节流处理
  • Ubuntu安装Docker部署Python Flask Web应用
  • PHP语法基础篇(六):数组
  • 代码随想录|图论|09沉没孤岛
  • LSTM每个变量的shape分析
  • 从输入到路径:AI赋能的地图语义解析与可视化探索之旅
  • 通过ETL从MySQL同步到GaussDB
  • 喜讯 | Mediatom斩获2025第十三届TopDigital创新营销奖「年度程序化广告平台」殊荣
  • LINUX625 DNS反向解析
  • 基于 Spring Boot + Vue 3的现代化社区团购系统
  • 科技如何影响我们的生活?
  • 工业电子 | 什么是SerDes,为何工业和汽车应用需要它?
  • HarmonyOS NEXT仓颉开发语言实战案例:简约音乐播放页
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件
  • 使用Docker部署mysql8
  • 社会工程--如何使用对方的语言
  • JDBC入门:Java连接数据库全指南
  • AI辅助编写前端VUE应用流程
  • 树状dp(dfs)(一道挺基础的)
  • Spring Boot 项目问题:while constructing a mapping found duplicate key api
  • 微信小程序封装loading 修改
  • 常见网络安全威胁和防御措施
  • 智能实验室革命:Deepoc大模型驱动全自动化科研新生态