手把手教你使用 ArkTS 中的 canvas 实现签名板功能

鸿蒙Harmony应用开发—ArkTS声明式开发(画布组件:Canvas) ArkTS声明式开发(画布组件:Canvas) 阅读详情

一、屏幕旋转

● 实现签名板的第一个功能就是旋转屏幕。旋转屏幕在各种框架中都有不一样的方式,比如:在 H5 端,我们一般是使用 CSS 中的 transform 属性中的 rotate()方法来强制将网页横屏,然后实现一系列功能

● 在嵌套第三方 APP 中,我们一般是调用对应的 SDK 提供的方法,即可实现旋转屏幕

● .....

实现方式还有很多,各有千秋,相信 HarmonyOS 也会提供对应 API 方法来设置旋转屏幕。

而我自己则是在页面内通过 Window 对象的 setPreferredOrientation() 方法实现横竖屏切换。以下是我实现的完整代码:

// 在EntryAbility.ts中获取窗口实例并赋值给全局变量,如此所有页面都可以通过全局// 变量去修改窗口信息,不需要重新获取
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    windowStage.getMainWindow((err, data) => {
      if (err.code) {
        console.error('获取失败' + JSON.stringify(err));
        return;
      }
      console.info('获取主窗口的实例:' + JSON.stringify(data));
      globalThis.windowClass = data // 赋值给全局变量windowClass
    });
  }
}


// 在具体页面中的使用
import window from '@ohos.window';
@Entry
@Componentstruct SignatureBoard {


  onPageShow() {
// 获取旋转的方向,具体可以查看对应文档
    let orientation = window.Orientation.LANDSCAPE_INVERTED;
    try {
      // 设置屏幕旋转
      globalThis.windowClass.setPreferredOrientation(orientation, (err) => {});
    } catch (exception) {
      console.error('设置失败: ' + JSON.stringify(exception));
    }
  }
}

二、canvas 画布

解决了屏幕旋转问题,接下来实现签名功能。因为在之前就已经开发过,只要将对应的语法转成 ArkTS 的语法就好。以下是代码解析:2.1 按照官方文档使用 canvas 组件

@Entry@Component
struct SignatureBoard {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)


  build() {
    Column() {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .onReady(() => {
        })
    }
    .width('100%')
    .height('100%')
  }
}

2.2 设置画笔的属性以及绑定手势功能。在 js 中我们基本都是使用鼠标事件来实现的,而在 ArkTS 中是通过手势方法来监听手指在屏幕上的操作,有很多种,大家需要用到的可以去查看对应的文档。

build() {    Column() {      Canvas(this.context)        .width('100%')        .height('100%')        .backgroundColor('#fff')        .onReady(() => {          this.context.lineWidth = 3; // 设置画笔的粗细          this.context.strokeStyle = "#000"; // 设置画笔的颜色          // 还可以设置很多,根据自己业务需要        })        .gesture(          PanGesture(this.panOption)            .onActionStart((event: any) => {               // 手指按下的时候            })            .onActionUpdate((event: any) => {               // 手指移动的时候            })            .onActionEnd(() => {               // 手指离开的时候            })        )  }

2.3 我们实现的手势的绑定,那么就可以实现手指在屏幕上滑动之后画布就绘画出对应的轨迹路线了,这里将会使用到一些画布的功能。

@Entry
@Componentstruct SignatureBoard {
  private lastX: number = 0;
  private lastY: number = 0;
  private isDown: Boolean = false;
  private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.All, distance: 1 })
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)


  draw(startX, startY, endX, endY) {
    // 起点
    this.context.moveTo(startX, startY);
    // 终点
    this.context.lineTo(endX, endY);
    // 调用 stroke,即可看到绘制的线条
    this.context.stroke();
  }
  build() {
    Column() {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#fff')
        .onReady(() => {
          this.context.lineWidth = 3;
          this.context.strokeStyle = "#000";
        })
        .gesture(
          PanGesture(this.panOption)
            .onActionStart((event: any) => {
              this.isDown = true;
              // 按下时的点作为起点
              this.lastX = event.localX;
              this.lastY = event.localY;
              // 创建一个新的路径
              this.context.beginPath();
            })
            .onActionUpdate((event: any) => {
              // 没有按下就不管
              if (!this.isDown) return;
              const offsetX = event.localX
              const offsetY = event.localY
              // 调用绘制方法
              this.draw(this.lastX, this.lastY, offsetX, offsetY);
              // 把当前移动时的坐标作为下一次的绘制路径的起点
              this.lastX = offsetX;
              this.lastY = offsetY;
            })
            .onActionEnd(() => {
              this.isDown = false;
              // 关闭路径
              this.context.closePath();
            })
        )
    }
    .width('100%')
    .height('100%')
  }
}

以上就是我们实现签名板的完整思路以及代码了,有几个需要注意的点是:

1. new PanGestureOptions 实例的时候需要把 distance 设置小一点,值越小灵敏度就越高

2. PanGesture 的回调方法中 event 参数,官方默认给的属性类型为 GestureEvent。但是我在编辑器源码中查看该属性没有我们定义我们想要的 localX、localY,但是实际是有返回的,如果直接用编辑器会报错。所以需要将 event 定为 any 类型,这样就可以获取且不报错了。

这次的画布签名板的功能就分享这些,希望能够帮助各位开发者,后续会继续分享出更多在项目中经常用到的工具。

鸿蒙Harmony应用开发—ArkTS声明式开发(画布组件:CanvasRenderingContext2D) ArkTS声明式开发(画布组件:CanvasRenderingContext2D) 阅读详情

相关推荐

鸿蒙5.0版开发:ArkTS画布组件(Canvas)

提供画布组件,用于自定义绘制图形。

m0_69424697的博客 1331

HarmonyOS/OpenHarmony应用开发-ArkTS画布组件CanvasRenderingContext2D对象(十四)

HarmonyOS/OpenHarmony应用开发-ArkTS画布组件CanvasRenderingContext2D对象(十四)createPattern bezierCurveTo

weixin_69135651的博客 340

如何使用ArkTS中的canvas实现签名板功能

实现签名板的第一个功能就是旋转屏幕。旋转屏幕在各种框架中都有不一样的方式,比如: 在H5端,我们一般是使用CSS中的transform属性中的rotate()方法来强制将网页横屏,然后实现一系列功能 在嵌套第三方APP中,我们一般是调用对应的SDK提供的方法,即可实现旋转屏幕 .....

2401_82546228的博客 1250

HarmonyOS ArkTS语言,运行Hello World(二)

HarmonyOS ArkTS语言,运行Hello World(二)

陈志宝‑天津|Android&Java 全栈开发工程师 916

鸿蒙ArkTS开始实例:【canvas实现签名板功能】

使用ArkTS中的canvas实现签名板的功能,canvas画布大家都很熟悉,我们会用它经常实现一些画板或者图表、表格之类的功能。canvas签名板是我在开发APP过程中实现的一个功能,开发过程中也是遇到比较多的问题。实现签名板的第一个功能就是旋转屏幕。实现方式还有很多,各有千秋,相信HarmonyOS也会提供对应API方法来设置旋转屏幕。而我自己则是在页面内通过 Window 对象的 setPreferredOrientation() 方法实现横竖屏切换。

m0_62167422的博客 1264

保姆级教程:手把手教你用记事本修改DNF私服PVF,打造毕业级自定义装备

本文提供了一份详细的DNF私服PVF文件修改教程,教你如何使用记事本轻松打造毕业级自定义装备。从PVF文件结构解析到基础属性修改,再到高级特效设置,手把手教你实现装备属性的全方位定制,无需编程基础即可完成。

weixin_42525385的博客 1199

【开发者说】手把手教你使用ArkTS中的canvas实现签名板功能

🧑‍🎓​​这次我要分享的是使用ArkTS中的canvas实现签名板的功能,canvas画布大家都很熟悉,我们会用它经常实现一些画板或者图表、表格之类的功能。canvas签名板是我在开发APP过程中实现的一个功能,开发过程中也是遇到比较多的问题。实现签名板的第一个功能就是旋转屏幕。旋转屏幕在各种框架中都有不一样的方式,比如:在H5端,我们一般是使用CSS中的transform属性中的rotate()方法来强制将网页横屏,然后实现一系列功能。

爱蹦跶的全栈大A阿 410

芯片良率提升:从设计到制造的系统性工程实践

在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率

weixin_42526068的博客 634

HamronyOS开发5.0【实现签名板的功能】

目前鸿蒙已经推出API12了,对比API9的时候,现在实现一个功能太简单了。这期主要讲一下之前实现功能有多难受,以及如何实现。,现在这套代码也是可以直接迁移到API12版本的。

2401_82772199的博客 970

OpenSees入门指南:从零开始的环境配置与TCL脚本实战

本文提供了一份详细的OpenSees入门指南,涵盖从零开始的环境配置到TCL脚本实战的全过程。文章重点讲解了OpenSees的安装步骤、环境变量设置,并推荐了高效的VS Code集成开发环境配置方法。通过一个简支梁分析的完整TCL脚本示例,手把手引导读者完成第一个非线性有限元分析,帮助土木工程与结构工程领域的研究者与学生快速上手这一强大的开源分析工具。

weixin_28829339的博客 336

CameraLink接口详解:从引脚定义到信号传输

本文详细解析了CameraLink接口的物理连接与信号传输机制。从MDR26连接器的引脚定义与镜像关系入手,深入讲解了BASE与MEDIUM模式下的信号映射、LVDS差分传输原理,并强调了屏蔽层处理与端接电阻等关键硬件设计细节。文章结合实战经验,提供了常见图像传输问题的排查思路,是工业视觉领域高速图像传输的实用指南。

weixin_28318011的博客 889

鸿蒙ArkTS Canvas实战:转盘抽奖程序开发教程(基础到进阶)

本期代码仓库: Gitte-随着鸿蒙生态的蓬勃发展,HarmonyOS应用开发已成为众多开发者关注的新热点。ArkTS作为鸿蒙生态主推的应用开发语言,其声明式UI和高性能特性为构建复杂动效的界面提供了强大支持。在众多UI组件中,组件犹如一块画布,赋予开发者直接绘制图形的能力,是实现自定义、高灵活性UI动效的利器。为了帮助大家将ArkTS和Canvas的理论知识转化为实战能力,我将带领你从零开始,一步步实现一个功能完备的“转盘抽奖”程序。这不仅仅是一个简单的绘图练习,更是一个综合性的练手项目。

小韩的博客 6245

ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。

m0_51430584的博客 3097

HarmonyOS7 Canvas 签名板:用 PanGesture 采集轨迹点 + Canvas 渲染

电子签名、手写备注、涂鸦画板——这些功能看似需要专业的绘图库,其实 ArkUI 的Canvas组件配合PanGesture就能搞定。核心思路是:用手势采集手指的轨迹点,用 Canvas 把点连成线。今天来拆解一个签名板的实现思路。签名板的核心就是"采集 + 渲染"两步。PanGesture负责采集手指轨迹,Canvas负责把轨迹画出来。把这两个 API 用好,不仅能做签名板,还能做涂鸦画板、手写识别输入等功能。实际项目中别忘了处理多笔画和图片导出的需求。

71

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 417

掌握 Unity 中的状态机:综合指南

最后,将拥有一个由状态机驱动的功能齐全的播放器控制器,可以集成到自己的项目中。此外,状态机有助于实现复杂的人工智能、玩家控制、动画系统等,从而形成更强大、更灵活的游戏架构。状态机是计算机科学和游戏开发中的一个基本概念,它通过定义一组有限的状态及其之间的转换来模拟实体的行为。你可以定义常见的状态行为,例如 Enter、Update 和 Exit 方法,确保整个状态机架构的一致性和连贯性。由于前面提到的状态类扩展了 BaseState 类,因此我们可以为具有不同状态的不同对象创建单独的类。

yolo模型训练找我,AI游戏合作找我 1453

《星际练字板》一、Canvas使用指南

在 HarmonyOS 应用开发中,Canvas(画布)是最核心的 2D 绘图组件。无论是儿童练字板、签名板、涂鸦应用,还是数据可视化图表,都离不开 Canvas 的身影。本文将系统讲解 Canvas 组件的使用方法,并通过一个完整的实战示例,带你从零基础到熟练运用 Canvas 进行绘图开发。Canvas 是 ArkUI 框架提供的自定义绘制组件,开发者可以通过上下文对象,在画布上绘制各种图形、文本和图像。能力说明绘制图形矩形、圆形、弧线、多边形、贝塞尔曲线等绘制文本。

army16的专栏 337

【100%通过率】华为od机试C卷【小朋友来自多少小区】JS 实现

幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个.我们将这些数量汇总到数组 garden 中。请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区?

MISAYAONE的博客 2007

HarmonyOS 5.0应用开发——Canvas制作个人签名

使用鸿蒙Canvas制作个人签名是一种在HarmonyOS系统环境下,利用Canvas组件实现手写签名功能的技术。

高心星的专栏 1644

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

鸿蒙系统(HarmonyOS)应用开发之实现电子签名效果

基于OpenHarmony平台开发的DevEco电子签名应用,该应用提供精准手写签名功能,支持4种颜色选择和1-10级线条粗细调节,采用Canvas绘图技术实现流畅签名体验。应用包含撤销、清除画布和即时保存等实用功能,界面简洁直观,自适应不同屏幕尺寸。技术架构使用ArkTS/ETS语言开发,通过CanvasRenderingContext2D实现高精度绘图,并采用离屏渲染技术优化性能。适用于合同签署、会议纪要、法律文件等多种场景,为移动办公提供便捷安全的电子签名解决方案。

前端开发-前端技术分享 1411

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【转盘决定吧】HarmonyOS ArkTS 实战:随机引擎、转盘 Canvas 与结果闭环

项目名称:转盘决定吧。本文围绕《【转盘决定吧】HarmonyOS ArkTS 实战:随机引擎、转盘 Canvas 与结果闭环》补充真实场景、关键代码、结构拆分、验证清单和排错记录,帮助读者按步骤复现同类 HarmonyOS/前端工程问题。 ​ ​ ​ 摘要 随机工具不是一个 Math.random() 就结束。本文从“转盘决定吧”的转盘、随机抽取、硬币、骰子四类功能出发,拆解一个随机功能的完整技术闭环:输入校验、

2401_84996024的博客 2739

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

从零构建 HarmonyOS 原生应用与 2D 游戏:ArkTS + ArkUI 全栈开发实战

本文介绍如何从零开发HarmonyOS原生应用和2D游戏的全栈开发方案。首先讲解开发环境配置,包括DevEco Studio、HarmonyOS SDK和Node.js的安装。然后通过ArkTS语言和ArkUI框架,演示如何构建支持手机、平板和PC的自适应界面。重点展示了一个类似"Flappy Bird"的2D游戏实现过程,包括Canvas组件使用、游戏核心逻辑设计(重力系统、管道生成、碰撞检测)以及性能优化。文章提供了完整的代码示例,涵盖响应式布局、页面路由、游戏引擎开发等关键技术点,

2501_93573294的博客 1368

鸿蒙 HarmonyOS 应用开发实战|手势绘制(Drawing Canvas)— onTouch 事件与画笔/橡皮擦

手势绘制(Drawing Canvas)是一款手指涂鸦画板应用。用户可以在画布上通过手指滑动自由绘制线条,支持 8 种颜色选择和 3 种笔触大小切换,并提供了橡皮擦擦除和清空画布功能。在当前版本的 HarmonyOS 中,虽然没有像 Web 端 Canvas API 那样提供path或lineTo等绘图上下文,但通过onTouch事件记录触摸点坐标,再利用Stack层叠布局在不同位置渲染小圆点,同样可以实现流畅的手绘效果。这种点阵式绘图。

2403_87838053的博客 211

鸿蒙原生ArkTS-鸿蒙6.0新特性-动态模糊视频背景登录页

鸿蒙6.0 ArkTS动态模糊登录页技术解析 本项目基于鸿蒙6.0(HarmonyOS NEXT)的ArkUI框架,打造了一个具有动态模糊视频背景的沉浸式登录页面。核心特性包括: 三层视觉架构: 底层Canvas粒子动画系统(80个彩色粒子+星云光晕+连线效果) 中层渐变遮罩层 上层毛玻璃悬浮登录卡片 关键技术点: 采用backgroundBlurStyle实现毛玻璃效果 CanvasRenderingContext2D绘制动态粒子背景 @State响应式状态管理 animateTo弹性动画交互 深浅色主题

s1316339343的博客 405

#鸿蒙 NEXT 应用开发实战:用 ArkTS 打造喝水提醒 App(API 24 篇)

本文介绍了基于HarmonyOS NEXT和ArkTS开发喝水提醒App的全过程。作者针对现代人饮水不足的问题,分析了现有应用存在的平台绑定、通知干扰等问题,选择API 24版本作为开发目标,充分利用ArkTS严格模式的类型安全和性能优势。文章详细阐述了开发环境配置、核心需求分析(包括饮水记录、进度可视化、目标设置等五大功能),以及采用单页面+状态驱动的架构设计。该项目充分利用鸿蒙生态特性,打造轻量级、本地优先的喝水提醒解决方案,避免功能臃肿,专注于改善用户饮水习惯。

duluo133的博客 467

HarmonyOS 6.1.1:让 Canvas 的文字抗锯齿进入运行时

前端开发里有一类问题很难沟通:页面没有报错,功能也能使用,但用户觉得某段文字“不够清楚”。如果文字来自普通 ArkUI 组件,开发者通常会先检查字体、字号、字重和布局;如果文字画在 Canvas 中,排查范围还要加上画布尺寸、设备像素密度、坐标位置、缩放比例、重复绘制和图片压缩。这些变量叠在一起时,一张静态截图很难回答问题。设计人员看到的是边缘发虚,测试人员记录的是某台设备上效果不一致,开发人员却不知道差异究竟来自字体、屏幕还是绘制策略。传统做法往往是修改代码、重新构建、重新安装,再凭记忆比较上一次画面。

TKK1234567890的博客 537
上一篇: HamronyOS 自动化测试框架使用指南
下一篇: HarmonyOS 应用事件打点开发指导
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值