「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能
本篇教程将实现滑动解锁屏幕功能,通过 Slider
组件实现滑动操作,学习事件监听、状态更新和交互逻辑的实现方法。
关键词
- 滑动解锁
- UI交互
- 状态管理
- 动态更新
- 事件监听
一、功能说明
滑动解锁屏幕功能包含以下功能:
- 滑动解锁区域:用户通过滑动操作完成屏幕解锁。
- 滑动距离验证:滑块移动到特定位置后触发解锁事件。
- 状态提示:展示解锁成功或未完成的状态提示。
- 锁定和解锁图标切换:根据解锁状态切换锁定和解锁图标。
二、所需组件
@Entry
和@Component
装饰器Row
和Column
布局组件Text
组件用于展示提示信息Slider
组件用于实现滑动操作Button
组件用于重置滑块Image
组件用于装饰界面@State
修饰符用于状态管理
三、项目结构
- 项目名称:
SlideToUnlockApp
- 自定义组件名称:
UnlockPage
- 代码文件:
UnlockPage.ets
、Index.ets
四、代码实现
1. 滑动解锁页面代码
// 文件名:UnlockPage.ets@Component
export struct UnlockPage {@State sliderValue: number = 0; // 滑块当前值@State unlockStatus: string = '请滑动解锁'; // 解锁状态提示// 获取锁定或解锁图标路径getIconPath(): string {return this.sliderValue === 100 ? 'app.media.unlock_icon' : 'app.media.lock_icon';}// 滑块滑动事件处理onSliderChange(newValue: number): void {this.sliderValue = newValue;this.unlockStatus = newValue === 100 ? '解锁成功!' : '请滑动至最右端解锁';}// 重置滑块resetSlider(): void {this.sliderValue = 0;this.unlockStatus = '请滑动解锁';}build(): void {Column({ space: 20 }) {Text('滑动解锁屏幕功能').fontSize(24).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 显示解锁状态Text(`当前状态:${this.unlockStatus}`).fontSize(18).margin({ top: 20 }).alignSelf(ItemAlign.Center);// 显示锁定/解锁图标Image($r(this.getIconPath())).width(150).height(150).alignSelf(ItemAlign.Center);// 滑动解锁区域Slider({value: this.sliderValue, // 初始值max: 100, // 滑块最大值}).blockColor(Color.Blue).trackColor(Color.Gray).onChange((newValue: number) => this.onSliderChange(newValue)).width('80%').height(50).alignSelf(ItemAlign.Center);// 重置按钮Button('重置滑块').onClick(() => this.resetSlider()).width(120).height(40).alignSelf(ItemAlign.Center).backgroundColor('#FF5555').fontColor(Color.White);}.padding(20).width('100%').height('100%');}
}
2. 主入口文件
// 文件名:Index.etsimport { UnlockPage } from './UnlockPage';@Entry
@Component
struct Index {build() {Column() {UnlockPage() // 调用滑动解锁页面}.padding(20);}
}
效果示例:用户通过滑块滑动至最右端完成屏幕解锁。
效果展示:
五、代码解读
-
滑块滑动与验证
- 使用
Slider
组件捕获滑动值,并在滑块值达到100
时触发解锁事件。
- 使用
-
状态提示
unlockStatus
状态用于实时更新解锁提示信息,根据滑块位置更新提示状态。
-
锁定和解锁图标切换
- 通过
Image
组件调用getIconPath()
动态显示不同状态下的图标。
- 通过
-
重置功能
- 点击“重置滑块”按钮,将滑块恢复初始位置并更新状态提示。
六、优化建议
- 添加滑块动画效果,提升解锁体验。
- 增加解锁提示音,增强提示效果。
- 提供滑块样式自定义功能,如滑块背景和形状设置。
七、效果展示
- 滑块操作:用户通过滑块完成屏幕解锁。
- 状态更新:实时显示解锁提示状态。
- 图标切换:滑块滑动完成时从锁定图标切换为解锁图标。
八、相关知识点
- 「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider和Progress组件
- 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text和Button组件详解
小结
本篇教程展示了如何使用 Slider
组件实现滑动解锁功能,通过状态管理和事件监听,实现了基础滑块交互逻辑和状态图标切换功能。
下一篇预告
在下一篇「UI互动应用篇32 - 随机点名器」中,将实现一个随机点名小应用,通过数据随机选择和展示,模拟课堂点名功能。
上一篇: 「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
下一篇: 「Mac畅玩鸿蒙与硬件55」UI互动应用篇32 - 随机点名器
作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=670
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能
本篇教程将实现滑动解锁屏幕功能,通过 Slider 组件实现滑动操作,学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能: 滑动解锁区域:用…...

SMMU软件指南之系统架构考虑
安全之安全(security)博客目录导读 目录 5.1 I/O 一致性 5.2 客户端设备 5.2.1 地址大小 5.2.2 缓存 5.3 PCIe 注意事项 5.3.1 点对点通信 5.3.2 No_snoop 5.3.3 ATS 5.4 StreamID 分配 5.5 MSI 本博客介绍与 SMMU 相关的一些系统架构注意事项。 5.1 I/O 一致性 如…...

使用高云小蜜蜂GW1N-2实现MIPI到LVDS(DVP)转换案例分享
作者:Hello,Panda 大家晚上好,熊猫君又来了。 今天要分享的是一个简单的MIPI到LVDS(DVP)接口转换的案例。目的就是要把低成本FPGA的应用潜力充分利用起来。 一、应用背景 这个案例的应用背景是:现在还在…...

「C++笔记」unordered_map:哈希化的无序映射函数(键值对)
unordered_map 是 C 中一个经过哈希函数(Hash)处理的映射(map)容器。 本文中的map和set是差不多的,unordered_map与unordered_set也是对应的。所以不再单独写一篇了。 这里的内容建议看完本文之后再回过头来看 二者虽然…...

Linux 安装jdk
1、官网下载jdk https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html2、以tar包为例,在window或者Linux解压都可以,这里直接在win解压了,上传到服务器 3、在/usr/local/ 创建jdk目录,将jdk上传到…...
asp.net core 发布到iis后,一直500.19,IIS设置没问题,安装了sdk,文件夹权限都有,还是报错
原因就是没有安装ASP.NET Core 9.0 Runtime (v9.0.0) - Windows Hosting Bundle,我是只安装了.net core的sdk,下面介绍下sdk和hosting bundle的关系 在 .NET Core 和 ASP.NET Core 的开发中,SDK(Software Development Kit&#x…...

【Go】运行自己的第一个Go程序
运行自己的第一个Go程序 一、Go语言的安装Go环境安装查看是否安装成功配置GOPROXY(代理) 二、Goland安装三、Goland破解四、新建项目 开一篇专栏记录学习Go的过程,一门新语言从hello world开始,这篇文章详细讲解Go语言环境搭建及hello world实现 一、Go语…...
qt qss文件的使用
qt样式的修改方式 一 通过ui界面的改变样式表来直接修改显示效果。 不推荐,其他人不好修改,不够直观,不易维护。 二 通过setStyleSheet接口修改。 一般,界面很少的时候可以使用。一旦界面多起来,代码部分就显得杂乱…...

【管道——二分+区间合并】
题目 思路 区间合并 1、按照左端点排序2、遍历窗口,若窗口非法,继续遍历;否则执行33、若是第一个窗口,设定合并结果初值,判断结果左端点是否造成“起点过大”,是,FALSE退出;否则执行…...

宽带、光猫、路由器、WiFi、光纤之间的关系
1、宽带(Broadband) 1.1 宽带的定义宽带指的是一种高速互联网接入技术,通常包括ADSL、光纤、4G/5G等不同类型的接入方式。宽带的关键特点是能够提供较高的数据传输速率,使得用户可以享受到稳定的上网体验。 1.2 宽带的作用宽带是…...

如何排查 Apache Doris 中 “Failed to commit txn“ 导入失败问题?
今天来聊聊 Doris 数据导入那些事儿。你是不是在数据导入的时候遇到各种状况,让人头疼不已?别担心,这篇文章给你答案! 在 Doris 的版本里,< 2.0.3 的时候,数据迁移存在一些已知的问题,比如可…...

回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 数据准备&#x…...

HCIA-Access V2.5_7_3_XG(S)原理_关键技术
为什么需要测距 因为上行链路只有一根纤,而且每一个ONU到OLT的距离是不一样的,虽然上行通过TDMA技术,让每一个ONU在不同的时间段发送数据,但是仍然有可能在同一时刻到达分光器,产生数据冲突。 有测距的信元传输 所以为了避免碰撞冲突,通过ONU在注册的时候就会启动测距…...
leetcode hot 100 不同路径
62. 不同路径 已解答 中等 相关标签 相关企业 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )…...

智慧工地解决方案 1
建设背景与挑战 工地施工现场环境复杂,人员管理难度大,多工种交叉作业导致管理混乱,事故频发。传统管理方式难以实现科学、有效、集中式的管理,特别是在环境复杂、地点分散的情况下,监管困难,取证复杂。施…...
LeetCode -Hot100 - 53. 最大子数组和
前言 本专栏主要通过“LeetCode 热题100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c/java。如果同样正在练习LeetCode 热题100的朋友欢迎关注或订阅本专栏。有疑问欢迎留言交流~ 题目描述 题目链接 示例 1: 输入:nums [-2,1…...
php 多进程那点事,用 swoole 如何解决呢 ?
在 PHP 中,多进程的处理通常会遇到一些挑战,比如资源共享、进程间通信、性能优化等。Swoole 是一个高性能的协程和多进程框架,旨在为 PHP 提供异步、并发、协程等功能,解决了传统 PHP 环境中的多进程管理问题。通过使用 Swoole&am…...

探索AI在地质科研绘图中的应用:ChatGPT与Midjourney绘图流程与效果对比
文章目录 个人感受一、AI绘图流程1.1 Midjourney(1)环境配置(2)生成prompt(3)完善prompt(4)开始绘图(5)后处理 1.2 ChatGPT不合理的出图结果解决方案 二、主题…...

【竞技宝】CS2:HLTV 2024 TOP11-w0nderful
北京时间2025年1月4日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP11为NAVI战队的w0nderful。 选手简介 w0nderful是一名来自于乌克兰的CS选手,现年20岁,目前在比赛中司职狙击手。w0nderful于2020年开启了自己的…...
Lua迭代器如何使用?
在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 12.1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...