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

鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)

项目概述

基于鸿蒙(OpenHarmony)平台开发的手势密码锁应用,旨在为用户提供安全、便捷且具有良好交互体验的身份验证方式。通过手势图案输入,用户可以轻松设置和验证密码,提升设备的安全性和个性化体验。

功能特点

  • 手势密码设置与验证:支持用户自定义手势密码,输入手势后进行验证,保障账户安全。
  • 动态提示与反馈:输入正确或错误时,界面会以不同颜色和动画进行反馈,并通过 Toast 提示用户操作结果。
  • 密码重置:一键重置手势密码,便于用户随时更换密码。
  • 美观的 UI 设计:采用半透明背景、圆形头像、阴影等现代化设计元素,提升视觉体验。
  • 动画与震动反馈:操作过程中配合动画效果,增强交互感。

技术架构

  • 开发平台:OpenHarmony(鸿蒙)
  • 主要语言:ETS(ArkTS)
  • 核心组件
  • PatternLock 手势密码输入组件
  • promptAction 用于 Toast 消息提示
  • vibrator 用于震动反馈(可选)
  • 状态管理:基于@State 实现页面响应式数据绑定
  • UI 布局:采用 Stack、Column 等布局组件,适配多种屏幕尺寸

使用场景

  • 设备解锁:可作为手机、平板等智能设备的解锁方式,提升安全性。
  • 应用内二次验证:适用于金融、隐私类 App 的二次身份验证。
  • 儿童/家庭模式:为特定应用场景(如儿童锁、家长控制)提供便捷的手势解锁方案。
  • 智能家居:可集成到智能门锁、家居控制面板等 IoT 设备中,实现手势开锁。

完整源码

import promptAction from '@ohos.promptAction';
import vibrator from '@ohos.vibrator';@Entry
@Component
struct PatternLockTest {@State passwords: Number[] = [1, 3, 4, 5, 7]@State message: string = '请验证密码'@State messageColor: Color = Color.White@State isSuccess: boolean = false@State isError: boolean = false@State showPattern: boolean = trueprivate patternLockController: PatternLockController = new PatternLockController()aboutToAppear() {// 初始化时确保状态正确this.isSuccess = false;this.isError = false;}// 显示状态消息并设置颜色showMessage(msg: string, isError: boolean = false, isSuccess: boolean = false) {this.message = msg;this.isError = isError;this.isSuccess = isSuccess;if (isError) {this.messageColor = Color.Red;// 错误时显示提示promptAction.showToast({message: msg,duration: 2000,bottom: '70%'});} else if (isSuccess) {this.messageColor = Color.Green; // 成功绿色// 成功时显示提示promptAction.showToast({message: msg,duration: 2000,bottom: '70%'});} else {this.messageColor = Color.White;}}build() {Stack() {// 背景图Image($r('app.media.background')).width('100%').height('100%').objectFit(ImageFit.Cover).opacity(0.85)Column({ space: 20 }) {// 顶部标题区域Column({ space: 8 }) {Image($r('app.media.avatar')).width(80).height(80).borderRadius(40).border({ width: 2, color: Color.White }).shadow({radius: 10,color: 'rgba(0,0,0,0.3)',offsetX: 0,offsetY: 2}).animation({duration: 500,curve: Curve.EaseOut}).margin({ top: 50, bottom: 20 })Text('手势密码').fontSize(28).fontWeight(FontWeight.Bold).fontColor(Color.White).opacity(0.9).shadow({radius: 2,color: 'rgba(0,0,0,0.3)',offsetX: 0,offsetY: 1})Text(this.message).textAlign(TextAlign.Center).fontSize(18).fontColor(this.messageColor).fontWeight(this.isError || this.isSuccess ? FontWeight.Bold : FontWeight.Normal).opacity(0.9).animation({duration: 300,curve: Curve.EaseInOut})}.width('100%').alignItems(HorizontalAlign.Center)// 手势密码区域if (this.showPattern) {Column() {PatternLock(this.patternLockController).sideLength(300)            // 设置宽高.circleRadius(10)           // 设置圆点半径.regularColor(Color.Gray)    // 设置圆点颜色.activeColor(Color.Blue)     // 设置激活状态的颜色.selectedColor(this.isError ? Color.Red : (this.isSuccess ? Color.Green : Color.Blue)) // 根据状态设置颜色.pathColor(this.isError ? Color.Red : (this.isSuccess ? Color.Green : Color.Blue))     // 根据状态设置路径颜色.pathStrokeWidth(8)         // 设置连线粗细.backgroundColor('rgba(255, 255, 255, 0.15)') // 半透明背景.autoReset(true)            // 支持用户在完成输入后再次触屏重置组件状态.onPatternComplete((input: Array<number>) => {console.log(input.join(','));if (input == null || input == undefined || input.length < 5) {this.showMessage("密码长度至少为5位数。", true);return;}if (this.passwords.length > 0) {if (this.passwords.toString() == input.toString()) {this.passwords = input;this.showMessage("密码验证成功", false, true);// 成功动画效果this.showPattern = false;setTimeout(() => {this.showPattern = true;this.isSuccess = false;}, 100);} else {this.showMessage('密码输入错误', true);}} else {this.passwords = input;this.showMessage("密码设置成功", false, true);}}).shadow({radius: 15,color: 'rgba(0,0,0,0.2)',offsetX: 0,offsetY: 5}).animation({duration: 500,curve: Curve.EaseOut})}}// 底部按钮区域Button('重置密码').fontSize(18).fontWeight(FontWeight.Medium).height(50).width(200).borderRadius(25).backgroundColor('rgba(255, 255, 255, 0.2)').fontColor(Color.White).shadow({radius: 8,color: 'rgba(0,0,0,0.2)',offsetX: 0,offsetY: 4}).onClick(() => {this.passwords = [];this.showMessage('请设置新的手势密码');this.patternLockController.reset();}).stateEffect(true).margin({ top: 30 })}.width('100%').height('100%').justifyContent(FlexAlign.SpaceEvenly).alignItems(HorizontalAlign.Center)}}
}

鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock) - 高质量源码分享平台-免费下载各类网站源码与模板及前沿动态资讯

http://www.dtcms.com/a/266701.html

相关文章:

  • [Linux]内核如何对信号进行捕捉
  • FastAPI 小白教程:从入门级到实战(源码教程)
  • springboot整合腾讯云cos对象存储,获取临时密钥,前端直传图片文件
  • Spring Cloud网关与CI文件配置请求安全性对比
  • 基于二维码的视频合集高效管理与分发技术
  • monorepo + Turborepo --- 运行任务
  • MySQL ON DUPLICATE KEY UPDATE 用法详解
  • 鸿蒙开发List长按Item拖拽切换效果
  • 基于区块链的物联网(IoT)安全通信与数据共享的典型实例
  • JSONLines和JSON数据格式使用教程
  • AI大模型:(二)1.5 Stable Diffusion中文文生图模型部署
  • 30 秒锁定黑客攻击:SLS SQL 如何从海量乱序日志中“揪”出攻击源
  • 【C语言刷题】第十天:加量加餐继续,代码题训练,融会贯通IO模式
  • 短篇小说7.4
  • BM4 合并两个排序的链表
  • QT6 源(152)模型视图架构里的表格窗体视图 QTableWidget 篇二:学习本类的 protected 权限的成员函数,以及信号与槽函数
  • c语言中的函数IV
  • MCMC:高维概率采样的“随机游走”艺术
  • pybind11 导出 C++ map 在 Python 层 get 访问慢的优化方案
  • 区块链技术核心组件及应用架构的全面解析
  • python打卡day59@浙大疏锦行
  • 车载电子电气架构 --- OEM走向开放协同与敏捷迭代
  • 数据结构:队列的顺序存储实现
  • 【Linux 系统】基础IO——Linux中对文件的理解
  • 【深度学习新浪潮】如何使用大模型等技术基于序列预测蛋白质的结构,功能和靶点?
  • 【学习笔记】Lean4基础 ing
  • 邮科千兆8光8电工业级交换机互联网的脉搏
  • 洛谷刷题8
  • 云原生Kubernetes系列 | Ingress和Egress网络策略NetworkPolicy结合案例使用详解
  • 5060Ti安装黑屏问题一解