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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236861.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubeadm搭建单master多node的k8s集群--小白文,图文教程

参考文献 K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客,但是有坑,故贴出我自己的过程,坑会少很多 注意: 集群配置是:一台master:zabbixagent-k8smaster,两台…

基于YOLOv7算法的高精度实时烟头目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法的高精度实时烟头目标检测系统可用于日常生活中检测与定位烟头目标,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练数…

重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉

目录 中国计算机大赛-人工智能创意赛现场C4-AI大赛颁奖及留影800个AI应用?这届大学生真能“搞事情”AI原生时代,百度要再培养500万大模型人才 中国计算机大赛-人工智能创意赛现场 12月8日,杭州,一位“白发老人”突然摔倒在地&…

halcon一维测量

标定的作用: 得到相机的内参和外参,即相机成像的模型规律 * fuse.hdev: measuring the width of a fuse wire * dev_update_window (off) dev_close_window () * **** * step: acquire image * **** read_image (Fuse, fuse) get_image_size (Fuse, Wid…

公交站间的距离

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之&#…

LeetCode 279完全平方数 139单词拆分 卡码网 56携带矿石资源(多重背包) | 代码随想录25期训练营day45

动态规划算法6 LeetCode 279 完全平方数 2023.12.11 题目链接代码随想录讲解[链接] int numSquares(int n) {//1确定dp数组,其下标表示j的完全平方数的最少数量//3初始化,将dp[0]初始化为0,用于计算,其他值设为INT_MAX用于递推…

C++联合体union

联合体 将多个类型合并到一起省空间 枚举与联合一起使用 匿名联合 类似于无作用域 C11联合体定义非内建类型 C11 引入了能够在联合体中使用非内建类型的能力,这些类型包括具有自定义构造函数、析构函数、拷贝构造函数和拷贝赋值运算符的类。 关键特性…

STM32F407-14.1.0-01高级定时器简介

TIM1 和 TIM8 简介 高级控制定时器(TIM1 和 TIM8)包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。 此类定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出…

软件运行原理 - 内存模型 - 栈内存

说明 C/C软件运行时,内存根据使用方式的不同分为堆内存和栈内存,栈内存使用有以下特征: 栈内存使用(申请、释放)由系统自动分配和释放,程序员不用做任何操作。栈内存重复使用,进入函数时数据入…

Axure安装及面板各区域详解

目录 一、Axure简介 二、Axure安装及使用准备 2.1 Axure官网 2.2 Axure授权 2.3 Axure汉化 2.4 设置RP文件保存路径 三、Axure菜单栏的使用 3.1 新建项目 3.2 新建元件库 3.3 自动备份设置 3.4 页面画布网格设置 四、Axure工具栏 4.1 选择模式 4.1.1 相交选中 4…

基于Qt的登录页面设计

题目: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和…

CyclicBarrier、CountDownLatch、Semaphore 的用法

CyclicBarrier、CountDownLatch、Semaphore 的用法 CountDownLatch(线程计数器 ) CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执…

建筑可视化数据大屏汇总,UI源文件(PC端大屏设计)

酷炫的大屏设计让数据更好的展现,方便业务人员分析数据,辅助领导决策。现在分享大屏Photoshop源文件,以下为部分截图示意。 划重点:文末可获得完整素材包~ 01 科技建筑平台数据可视化 02 建筑公司可视化数据汇总平台 03 深蓝…

软件开发流程分析

软件开发流程分析 相关概念1 原型设计2 产品设计3 交互设计4 代码实现详细步骤 相关概念 前端:自研API,调用第三放API 后端:自研API,第三方API 数据库:Mysql,数据采集,数据迁移 服务器&#xf…

软件兼容性测试:保障多样化用户体验的重要功能

随着移动设备和操作系统的快速发展,软件兼容性测试变得越发重要。这项测试确保软件在不同平台、设备和环境下都能够正常运行,提供一致而稳定的用户体验。下面是软件兼容性测试中的一些关键功能: 1. 跨平台兼容性测试 在不同操作系统上运行的软…

Shopify二次开发之五:元字段(Metafields)

目录 解释 操作 1、添加Custom data 2、选择特定类型的数据 3、为Page配置元子段和值 4、模板访问 解释 Shopify Metafields 是一种用于存储和管理自定义数据的功能。它们允许商户在商城中的产品、订单、客户、Page等对象上添加自定义字段,以满足特定业务需求…

【计算机网络】应用层电子邮件协议

一、电子邮件系统架构 电子邮件是一个典型的异步通信系统,发送方从UA,也就是邮件客户端,通过应用层SMTP协议,传输层tcp协议,发送给发送方的邮件服务器,比如使用的是163邮箱,163提供的SMTP服务器…

3D民俗非遗全景云展馆更高效低投入地传承传统文化

在数字化时代,VR全景沉浸式展示方案成为各行业打造沉浸式展示的新玩法。云览互动为企业和机构提供专业的VR全景沉浸式展示方案,通过虚拟体验带来前所未有的沉浸感和视觉冲击,为用户带来全新的体验。 非遗虚拟VR云展平台是一种全新的物质文化遗…

【MATLAB】基于CEEMD分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于CEEMD分解的信号去噪算法(基础版) 代码流程图 代码效果图 获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复CEEMD去噪 本公众号致力于解决找代码难,写代…

卖家必看!亚马逊关联封店要怎么申诉?亚马逊防关联方法分享

不少亚马逊卖家为了能够提升产品销量,这个时候可能就会多开店铺,但是亚马逊会通过技术手段识别账号之间的关联性,一旦被检测到多个账号为同一卖家所有,这些账号就会被判定为关联,很多卖家遇到后都不知道怎么处理&#…