「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能,通过 Slider 组件实现滑动操作,学习事件监听、状态更新和交互逻辑的实现方法。

在这里插入图片描述


关键词
  • 滑动解锁
  • UI交互
  • 状态管理
  • 动态更新
  • 事件监听

一、功能说明

滑动解锁屏幕功能包含以下功能:

  1. 滑动解锁区域:用户通过滑动操作完成屏幕解锁。
  2. 滑动距离验证:滑块移动到特定位置后触发解锁事件。
  3. 状态提示:展示解锁成功或未完成的状态提示。
  4. 锁定和解锁图标切换:根据解锁状态切换锁定和解锁图标。

二、所需组件
  • @Entry@Component 装饰器
  • RowColumn 布局组件
  • Text 组件用于展示提示信息
  • Slider 组件用于实现滑动操作
  • Button 组件用于重置滑块
  • Image 组件用于装饰界面
  • @State 修饰符用于状态管理

三、项目结构
  • 项目名称SlideToUnlockApp
  • 自定义组件名称UnlockPage
  • 代码文件UnlockPage.etsIndex.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.ets

import { UnlockPage } from './UnlockPage';

@Entry
@Component
struct Index {
  build() {
    Column() {
      UnlockPage() // 调用滑动解锁页面
    }
    .padding(20);
  }
}

效果示例:用户通过滑块滑动至最右端完成屏幕解锁。

效果展示
在这里插入图片描述


五、代码解读
  1. 滑块滑动与验证

    • 使用 Slider 组件捕获滑动值,并在滑块值达到 100 时触发解锁事件。
  2. 状态提示

    • unlockStatus 状态用于实时更新解锁提示信息,根据滑块位置更新提示状态。
  3. 锁定和解锁图标切换

    • 通过 Image 组件调用 getIconPath() 动态显示不同状态下的图标。
  4. 重置功能

    • 点击“重置滑块”按钮,将滑块恢复初始位置并更新状态提示。

六、优化建议
  1. 添加滑块动画效果,提升解锁体验。
  2. 增加解锁提示音,增强提示效果。
  3. 提供滑块样式自定义功能,如滑块背景和形状设置。

七、效果展示
  • 滑块操作:用户通过滑块完成屏幕解锁。
  • 状态更新:实时显示解锁提示状态。
  • 图标切换:滑块滑动完成时从锁定图标切换为解锁图标。

八、相关知识点
  • 「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
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


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

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

相关文章

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的,某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode,无效 3. 删除服务器上的~/.vscode-server 文件夹,无效 试过很多后,原来很可能是前一天anaconda卸载导致注册表项 步…

[论文笔记]Representation Learning with Contrastive Predictive Coding

引言 今天带来论文 Representation Learning with Contrastive Predictive Coding的笔记。 提出了一种通用的无监督学习方法从高维数据中提取有用表示,称为对比预测编码(Contrastive Predictive Coding,CPC)。使用了一种概率对比损失, 通过使用负采样使…

【C#深度学习之路】如何使用C#实现Yolo5/8/11全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo5/8/11全尺寸模型的训练和推理 项目背景项目实现调用方法项目展望写在最后项目下载链接 本文为原创文章,若需要转载,请注明出处。 原文地址:https://blog.csdn.net/qq_30270773/article/details/1449186…

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能,选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其,在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换,特别方便。VS文件另…

[Python学习日记-74] 面向对象实战2——选课系统

[Python学习日记-74] 面向对象实战2——选课系统 简介 开发要求 实现:选课系统 简介 在前面的《年会答题系统》当中我们介绍了面向对象软件开发的一些流程,当然这一流程只是涵括了大部分的,目前在业界也没有一个统一的标准,每个…

游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水平均识别率在89.9%

游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水识别率在92% 训练结果 数据集和标签 验证 游泳测试视频 根据测试的视频来获取检测结果: 游泳测试视频的置信度设置60% 检测结果如下&…

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义:让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…

MetaGPT - 多Agent框架

文章目录 一、关于 MetaGPT功能介绍快速开始的演示视频教程 二、安装Pip安装Docker安装 一、关于 MetaGPT MetaGPT 为GPTs分配不同的角色,以形成一个协作实体来完成复杂的任务。 github : https://github.com/geekan/MetaGPTtwitter : https://twitter.com/MetaGP…

Qt窗口获取Tftpd32_svc服务下载信息

前言 一个由Qt开发的Windows小工具需要布置Tftp协议服务端来支持设备下载数据,并显示下载列表(进度、下载源等)。 考虑开发方便,优先使用了Qtftp方案,经测试发现,不够稳定,会有下载超时的情况&a…

xml格式化(3):增加头部声明

前言 这篇文章&#xff0c;是用来增加头部声明。 正文 from lxml import etreedef pretty_print(element, level0, indent" "):result ""# 判断元素是否为注释节点if isinstance(element, etree._Comment):result f"{indent * level}<!--{el…

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

【Linux】定时运行shell脚本

1、at命令 at命令允许指定Linux系统何时运行脚本&#xff0c;它会将作业提交到队列中&#xff0c;指定shell在什么时候运行该作业。 at 的守护进程 atd 在后台运行&#xff0c;在作业队列中检查待运行的作业。 at 守护进程会检查系统的一个特殊目录&#xff08;一般位于/var/…

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

数据库高安全—角色权限:角色创建角色管理

目录 3.1 角色创建 3.2 角色管理 书接上文openGauss安全整体架构&安全认证&#xff0c;从安全整体架构与安全认证两方面&#xff0c;对高斯数据库的高安全性能进行了解读&#xff0c;本篇我们将从角色创建和角色管理两方面对高斯数据库的角色权限进行介绍。 3.1 角色创建…

【U8+】用友U8软件中,出入库流水输出excel的时候提示报表输出引擎错误。

【问题现象】 通过天联高级版客户端登录拥有U8后&#xff0c; 将出入库流水输出excel的时候&#xff0c;提示报表输出引擎错误。 进行报表输出时出现错误&#xff0c;错误信息&#xff1a;找不到“fd6eea8b-fb40-4ce4-8ab4-cddbd9462981.htm”。 如果您正试图从最近使用的文件列…

《GICv3_Software_Overview_Official_Release_B》学习笔记

1.不同版本的 GIC 架构及其主要功能如下图所示&#xff1a; 2.GICv2m&#xff08;Generic Interrupt Controller Virtualization Model&#xff09;是针对ARM架构的GIC&#xff08;通用中断控制器&#xff09;的一种扩展&#xff0c; GICv2m扩展为虚拟化环境中的中断管理提供了…

【循环神经网络】RNN介绍

在人工神经网络中&#xff0c;”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加&#xff0c;网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度&#xff0c;并使其能够提供不同级别的数据表示和特征提取&#xf…

C#调用Lua

目录 xLua导入 打包工具导入 单例基类导入与AB包管理器导入 Lua解析器 文件加载与重定向 Lua解析器管理器 全局变量获取 全局函数获取 对于无参数无返回值 对于有参数有返回值 对于多返回值 对于变长参数 完整代码 List与Dictionary映射Table 类映射Table 接口映射…

麒麟操作系统服务架构保姆级教程(七)Nginx+PHP+Mysql部署服务

上边几篇文章已经交过大家二进制部署nginx和php&#xff0c;现在咱们打通nginx和php&#xff0c;mysql和php&#xff0c;开始部署服务&#xff0c;学会部署服务之后就可以开始学习负载均衡啦&#xff0c;话不多说&#xff0c;咱们直接开始~~~ 目录 一、.nginx部署 二、安装PH…

开源模型迎来颠覆性突破:DeepSeek-V3与Qwen2.5如何重塑AI格局?

不用再纠结选择哪个AI模型了&#xff01;chatTools 一站式提供o1推理模型、GPT4o、Claude和Gemini等多种选择&#xff0c;快来体验吧&#xff01; 在全球人工智能模型快速发展的浪潮中&#xff0c;开源模型正逐渐成为一股不可忽视的力量。近日&#xff0c;DeepSeek-V3和Qwen 2.…