积分298 / 贡献0

提问9答案被采纳15文章3

[经验分享] 应用开发-手写板

海浪漂啊漂 显示全部楼层 发表于 2024-1-14 12:09:31
这是一个基于ArkUI开发的手写板应用,只需几十行简洁的代码,即可轻松实现以下手写功能和清空画布的操作

一、效果图:
devecostudio64_jEfyoFTjyR.gif
二、代码
  1. @Entry
  2. @Component
  3. struct Index {
  4.   //手写路径
  5.   @State pathCommands: string = '';

  6.   build() {
  7.     Column() {
  8.       //清空画布按钮
  9.       Button("清空")
  10.         .onClick(() => {
  11.           //将路径置空
  12.           this.pathCommands = '';
  13.         })
  14.       Flex() {
  15.         //如果路径不为空,那么展示path路径,
  16.         // stokeWidth(5)表示画笔宽度为5,
  17.         // fill('none')表示填充为空白,
  18.         // stroke(Color.Blue)表示画笔为蓝色
  19.         if (this.pathCommands != '') {
  20.           Path().commands(this.pathCommands).strokeWidth(5).fill('none').stroke(Color.Blue)
  21.         }
  22.       }.onTouch((event: TouchEvent) => {
  23.         //响应手势触摸操作
  24.         this.onTouchEvent(event)
  25.       }).width('100%').height('100%')
  26.     }
  27.   }

  28.   onTouchEvent(event: TouchEvent) {
  29.     //手指按下和移动时的位置转换成像素位置
  30.     let x = vp2px(event.touches[0].x);
  31.     let y = vp2px(event.touches[0].y);
  32.     switch (event.type) {
  33.       
  34.       //手指按下
  35.       case TouchType.Down:
  36.       //绘制点移动到(x,y)位置
  37.         this.pathCommands += 'M' + x + ' ' + y;
  38.         break;
  39.             
  40.       //当前位置画线到(x,y)位置
  41.       case TouchType.Move:
  42.         this.pathCommands += 'L' + x + ' ' + y;
  43.         break;
  44.       default:
  45.         break;
  46.     }
  47.   }
  48. }
复制代码
在这个代码中,我们构建了一个手势绘图应用。以下是关键部分的解释:
  • 手写路径存储:我们声明了一个字符串类型的变量“pathCommands”,用于存储手写路径的相关命令。
  • 页面布局:在build函数中,我们创建了两个元素:一个是清空按钮,另一个是用于展示手写路径的“path”组件。在path组件中,我们设置“commands”属性值为pathCommands,这样就能显示手写路径了。其他属性如stokeWidth(5)表示画笔宽度为5,fill('none')表示填充为空白,stroke(Color.Blue)表示画笔为蓝色。清空按钮的作用是将“pathCommands”的值置为空字符串,从而清除手写路径。
  • 数据生成: 在onTouchEvent方法中处理触摸事件,根据手指按下和移动的位置,将相应的绘制命令添加到路径“pathCommands”中,Path组件根据pathCommands生成相应的路径。其中两种绘制命令解释如下:"Mx y"表示将绘制点移动到(x,y)位置,“L x y”表示从当前位置画线到(x,y)位置。

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部