鴻蒙系統(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.pswp.cn/news/913133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue文本插值

好的&#xff0c;我們來詳細講解 Vue 中最基礎的數據展示方式&#xff1a;文本插值和在其內部使用的 JavaScript 表達式。 1. 文本插值 (Text Interpolation) 知識點: 文本插值是 Vue 中最基本的數據綁定形式。它使用“Mustache”語法&#xff08;雙大括號 {{ }}&#xff09;…

Python:線性代數,向量內積諧音記憶。

目錄1 先說結論2 解釋3 歡迎糾錯4 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、…

小程序導航設置更多內容的實現方法

在小程序中實現導航欄設置更多內容&#xff0c;可以通過以下幾種方式實現&#xff1a; 1. 使用原生導航欄自定義按鈕 javascript // app.json 或頁面.json中配置 {"navigationBarTitleText": "首頁","navigationBarTextStyle": "black&q…

SpringBoot 解決配置文件有黃色波浪線

在application.properties配置文件中有黃色波浪線&#xff0c;是警告!! 原因&#xff1a;編碼格式不一致&#xff01;&#xff01; 解決&#xff1a;Settings| Editor | File Encodings | 選擇UTF-8

在 Vue 3 中全局使用 Suspense 組件

Suspense 是 Vue 3 引入的一個內置組件&#xff0c;不需要引用可以直接用。用于處理異步依賴的等待狀態。雖然 Suspense 主要用于異步組件&#xff0c;但你也可以全局地使用它來管理整個應用的加載狀態。 全局 Suspense 的基本用法 1. 在根組件中使用 Suspense // main.js 或…

筆記/計算機網絡

Content 計算機網絡部分核心概念十大網絡協議一覽 計算機網絡部分核心概念 1. 什么是計算機網絡&#xff1f;它最基本的功能是什么&#xff1f; 計算機網絡是指通過某種傳輸介質將多臺獨立的計算機或設備連接起來&#xff0c;實現數據交換和資源共享的系統。其最基本的功能是數…

時頻圖數據集更正程序,去除坐標軸白邊及調整對應的標簽值

當數據集是時頻圖時可能有一個尷尬的問題&#xff0c;就是數據集制作好后&#xff0c;發現有白邊。 其實這也不影響訓練模型&#xff0c;可能對模型訓練效果的影響也是微乎其微的&#xff0c;于是大多數情況我會選擇直接用整張圖片訓練模型。但是&#xff0c;有的情況下&#x…

mv重命名報錯:bash:未預期的符號 ‘(‘附近有語法錯誤

文章目錄 一、報錯背景二、解決方法2.1、方法一&#xff1a;文件名加引號2.2、方法二&#xff1a;特殊字符前加\進行轉義 一、報錯背景 在linux上對一文件執行重命名時報錯。原因是該文件名包含空格與括號。 文件名如下&#xff1a; aa &#xff08;1).txt執行命令及報錯如下…

Unity-MMORPG內容筆記-其三

繼續之前的內容&#xff1a; 戰斗系統 無需多言&#xff0c;整個項目中最復雜的部分&#xff0c;也是代碼量最大的部分。 屬性系統 首先我們要定義一系列屬性&#xff0c;畢竟所謂的戰斗就是不斷地扣血對吧。 屬性系統是戰斗系統的核心模塊&#xff0c;負責管理角色的所有…

Linux入門篇學習——Linux 幫助手冊

目錄 一、Linux 幫助手冊 1.怎么打開幫助手冊 2.安裝依賴 3.使用手冊查看命令 一、Linux 幫助手冊 1.怎么打開幫助手冊 打開 ubuntu &#xff0c;輸入 man 命令打開幫助手冊&#xff0c;直接在控制臺輸入 man 就可以了&#xff0c; man 手冊一共有 9 頁&#xff0c…

2025年后端主流框架對比和競爭格局及趨勢發展

2025年的后端開發呈現出云原生主導、性能革命、AI深度融合的技術格局&#xff0c;主流框架在細分領域持續分化&#xff0c;新興技術快速滲透關鍵場景。以下是基于行業實踐與技術演進的深度解析&#xff1a; 一、主流框架競爭態勢與核心能力 1. Java生態&#xff1a;企業級市場的…

bRPC簡介

bRPC基礎介紹。 什么是RPC? 互聯網上的機器大都通過TCP/IP協議相互訪問&#xff0c;但TCP/IP只是往遠端發送了一段二進制數據&#xff0c;為了建立服務還有很多問題需要抽象&#xff1a; 數據以什么格式傳輸&#xff1f;不同機器間&#xff0c;網絡間可能是不同的字節序&am…

力扣網C語言編程題:在數組中查找目標值位置之二分查找法

一. 簡介 上一篇文章對力扣網上"有序數組中查找目標值范圍"題目進行了普通的解法。文章如下&#xff1a; 力扣網C語言編程題&#xff1a;在數組中查找目標值位置之暴力解法-CSDN博客 本文使用二分查找法進行實現&#xff0c;因為二分查找法符合題目要求&#xff0…

前端查詢條件加密傳輸方案(SM2加解密)

一、需求背景 控臺項目甲方進行安全測試&#xff0c;測試報告其中一條&#xff1a;敏感信息明文傳輸 1 敏感信息明文傳輸 中危 查詢接口傳輸手機號、銀行卡號等敏感信息時未加密/脫敏處理。 二、解決方案 討論出的方案是通過前端查詢條件加密&#xff0c;后端對加密的…

【Python】Flask網頁

Flask第三方庫安裝命令&#xff1a;pip install flask代碼&#xff1a;from flask import Flask app Flask(__name__)app.route("/") def hello():return "Hello world!"if __name__ "__main__":app.run()其中的"Hello world!"可以改…

數字資產革命中的信任之錨:RWA法律架構的隱形密碼

首席數據官高鵬團隊律師創作&#xff0c;AI輔助 在數字經濟的浪潮中&#xff0c;資產的邊界正在被重新定義。當一塊地產、一筆應收賬款、甚至一份碳配額被轉化為鏈上的數字代幣時&#xff0c;技術的光芒固然耀眼&#xff0c;但真正決定其生命力的&#xff0c;是背后隱匿的“信…

mobaxterm終端sqlplus亂碼問題解決

背景。使用mobaxterm終端連接linux。在查詢數據庫表注釋時發現**&#xff1f;**中文亂碼。影響對表的分析。完成以下三個編碼設置再打開sqlplus查詢含中文的數據就正常了 總結。需要查看sqlplus的編碼是什么 SELECT parameter, value FROM nls_database_parameters WHERE pa…

一個簡單的分布式追蹤系統

1. 準備工作 導入必要的庫 import contextvars import time from typing import Any, Optional, Dict, List, Union from dataclasses import dataclass, field2. 定義上下文變量 # 定義兩個上下文變量&#xff0c;存儲當前 Span 和 Trace _current_span: contextvars.Conte…

【Qt】事件處理、事件分發器、事件過濾器

事件處理 一. 事件事件處理鼠標事件處理按鍵事件處理定時器事件處理窗口事件處理 二. 事件分發器三. 事件過濾器 雖然 Qt 是跨平臺的 C 開發框架&#xff0c;Qt 的很多能力其實是操作系統提供的&#xff0c;只不過 Qt 封裝了系統 API&#xff0c;程序是運行在操作系統上的&…

廣東省省考備考(第三十八天7.4)——言語理解:邏輯填空(題目訓練)

錯題解析 本題可從第二空入手&#xff0c;橫線處搭配“理論”&#xff0c;且根據“使得”可知&#xff0c;橫線處與前文構成因果關系&#xff0c;即“遺傳學的空白和古生物證據的缺乏”導致他的理論在某些方面存在不足&#xff0c;A項“捉襟見肘”指拉一拉衣襟&#xff0c;就露…