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

HarmonyOS应用开发-手写板

        这是一个基于HarmonyOS做的一个手写板应用,只需要简单的几十行代码,就可以实现如下手写功能以及清空画布功能。

一、先上效果图:

二、上代码

@Entry
@Component
struct Index {//手写路径@State pathCommands: string = '';build() {Column() {//清空画布按钮Button("清空").onClick(() => {//将路径置空this.pathCommands = '';})Flex() {//如果路径不为空,那么展示path路径,// stokeWidth(5)表示画笔宽度为5,// fill('none')表示填充为空白,// stroke(Color.Blue)表示画笔为蓝色if (this.pathCommands != '') {Path().commands(this.pathCommands).strokeWidth(5).fill('none').stroke(Color.Blue)}}.onTouch((event: TouchEvent) => {//响应手势触摸操作this.onTouchEvent(event)}).width('100%').height('100%')}}onTouchEvent(event: TouchEvent) {//手指按下和移动时的位置转换成像素位置let x = vp2px(event.touches[0].x);let y = vp2px(event.touches[0].y);switch (event.type) {//手指按下case TouchType.Down://眺到(x,y)点this.pathCommands += 'M' + x + ' ' + y;break;//画线到(x,y)点case TouchType.Move:this.pathCommands += 'L' + x + ' ' + y;break;default:break;}}
}

在这个代码中,我们构建了一个手势绘图应用。以下是关键部分的解释:

  1. @Entry和@Component注解: 这两个注解用于标识这个类是一个入口点并且是一个组件。在HarmonyOS中,这是定义页面的标准方式。

  2. @State注解: 在HarmonyOS中,@State注解同样用于声明状态。在这里,我们声明了一个字符串类型的pathCommands,用于存储手势绘制的路径。

  3. build()函数:这个函数定义了HarmonyOS页面的结构,包括清空按钮和用于展示绘图路径的组件。

  4. onTouchEvent函数: 这个函数处理触摸事件,根据手指按下和移动的位置,将相应的绘制命令添加到路径中,实现了手势绘制的功能。

相关文章:

  • 2023年-含泪总结
  • 爱智EdgerOS之深入解析安全可靠的开放协议SDDC
  • Spring--10--Spring Bean的生命周期
  • 应用密码学期末复习(3)
  • 如何使用GaussDB创建外表(FOREIGN TABLE)
  • STM32超声波——HC_SR04
  • 解读 | 为什么有很多名人让人们警惕人工智能
  • 【NR技术】NR NG-RAN整体架构 -功能划分(三)
  • 人工智能|深度学习——知识蒸馏
  • 基于单片机的定时插座在智能家居中的应用
  • Linux ln命令教程:如何创建符号链接(附案例详解和注意事项)
  • 双荧光素酶报告基因检测(五)
  • 大模型应用_AutoGPT
  • viple与物理机器人(一):线控模拟
  • MySQL InnoDB Replication部署方案与实践
  • 【Linux系统编程】快速查找errno错误码信息
  • 【刷算法】从上往下打印二叉树
  • CEF与代理
  • Date型的使用
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • IOS评论框不贴底(ios12新bug)
  • JavaScript 一些 DOM 的知识点
  • java取消线程实例
  • JS 面试题总结
  • PHP的Ev教程三(Periodic watcher)
  • springboot_database项目介绍
  • springMvc学习笔记(2)
  • 从tcpdump抓包看TCP/IP协议
  • 搞机器学习要哪些技能
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 温故知新之javascript面向对象
  • 正则表达式
  • 中文输入法与React文本输入框的问题与解决方案
  • ​你们这样子,耽误我的工作进度怎么办?
  • (C#)一个最简单的链表类
  • (ZT)一个美国文科博士的YardLife
  • (二十三)Flask之高频面试点
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)memcache、redis缓存
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .net 程序发生了一个不可捕获的异常
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • [APIO2012] 派遣 dispatching
  • [C# WPF] 如何给控件添加边框(Border)?
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [ffmpeg] 定制滤波器
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [JDBC-1] JDBC Base Template