鸿蒙开发中BindSheet应用 打造半模态转场效果

devtools/2025/2/27 6:29:57/

在鸿蒙开发中,BindSheet 组件可用于创建半模态窗口,通过设置合适的属性和添加动画效果,能够实现具有转场效果的半模态窗口。以下是详细的实现步骤和示例代码。

实现思路

  1. 布局设计:使用 BindSheet 组件创建半模态窗口,并设置其内容布局。
  2. 显示与隐藏控制:通过状态变量控制 BindSheet 的显示与隐藏。
  3. 转场动画添加:利用 Animator 组件为 BindSheet 添加转场动画效果,使其在显示和隐藏时具有平滑的过渡。

示例代码

@Entry
@Component
struct BindSheetExample {// 控制 BindSheet 显示与隐藏的状态变量private isBindSheetVisible: boolean = false// 动画播放控制器private animatorController: AnimatorController = new AnimatorController()build() {Stack({ alignContent: Alignment.Center }) {// 触发打开 BindSheet 的按钮Button('打开半模态窗口').onClick(() => {// 点击按钮时,显示 BindSheetthis.isBindSheetVisible = true// 播放显示动画this.animatorController.play()})if (this.isBindSheetVisible) {BindSheet({// 当 BindSheet 关闭时,更新状态变量onDismiss: () => {this.isBindSheetVisible = false}}) {Column({ space: 20 }) {// BindSheet 内的文本内容Text('这是半模态窗口的内容').fontSize(20)// 关闭 BindSheet 的按钮Button('关闭窗口').onClick(() => {// 点击关闭按钮时,隐藏 BindSheetthis.isBindSheetVisible = false})}.width('100%').padding({ left: 20, top: 20, right: 20, bottom: 20 }).backgroundColor('#FFFFFF') // 内容区域的背景颜色为白色}.backgroundColor('#00000080') // 设置 BindSheet 的背景为半透明黑色.position({ x: 0, y: 0 }).width('100%').height('auto').opacity(0) // 初始透明度为 0.translate({ x: 0, y: 100 }) // 初始位置向下偏移 100 像素.animate({duration: 300, // 动画时长为 300 毫秒curve: Curve.EaseOut // 动画曲线为 EaseOut}) {this.animatorController = new AnimatorController({// 显示动画:透明度变为 1,位置恢复正常play: () => {this.opacity = 1this.translate = { x: 0, y: 0 }},// 隐藏动画:透明度变为 0,位置向下偏移 100 像素reverse: () => {this.opacity = 0this.translate = { x: 0, y: 100 }}})}}}.width('100%').height('100%')}
}

代码解释

  1. 状态管理:使用 isBindSheetVisible 状态变量控制 BindSheet 的显示与隐藏。当点击“打开半模态窗口”按钮时,将 isBindSheetVisible 设置为 true,并播放显示动画;点击“关闭窗口”按钮时,将 isBindSheetVisible 设置为 false
  2. BindSheet 组件:创建半模态窗口,设置其背景颜色为半透明黑色,内容区域为白色。
  3. 转场动画
    • 初始时,设置 BindSheet 的透明度为 0,位置向下偏移 100 像素。
    • 使用 animate 方法添加动画效果,动画时长为 300 毫秒,动画曲线为 EaseOut
    • 通过 AnimatorController 控制动画的播放和反转,实现显示和隐藏时的平滑过渡。

注意事项

  • 动画效果的具体参数(如时长、偏移量、动画曲线等)可以根据实际需求进行调整。
  • 确保在 onDismiss 回调中正确更新 isBindSheetVisible 状态变量,以避免出现显示异常的问题。

http://www.ppmy.cn/devtools/162983.html

相关文章

2025最新智能优化算法:人工旅鼠算法(Artificial Lemming Algorithm, ALA)求解23个经典函数测试集,MATLAB

一、人工旅鼠优化算法 人工旅鼠算法(Artificial Lemming Algorithm, ALA)是2025年提出的一种新型生物启发式优化算法,受旅鼠的四种典型行为启发:长距离迁徙、挖洞、觅食和躲避捕食者。该算法通过模拟这些行为来解决复杂的优化问题…

P9231 [蓝桥杯 2023 省 A] 平方差--巧妙统计奇数的个数!

P9231 [蓝桥杯 2023 省 A] 平方差 题目 分析统计奇数个数统计4的倍数个数代码 题目 分析 看题目字挺少,条件,目的非常清晰,我脑子中的暴力算法直接涌现出来了^ ^,都是我看来一下L,R的范围QAQ 分享大佬题解 将x表示为…

嵌入式八股文(五)硬件电路篇

一、名词概念 1. 整流和逆变 (1)整流:整流是将交流电(AC)转变为直流电(DC)。常见的整流电路包括单向整流(二极管)、桥式整流等。 半波整流:只使用交流电的正…

服务器租用的价格受哪些因素影响?

1、 服务器配置 租用服务器配置的成本占租用服务器成本的关键部分。如果服务器配置完善、功能完善、臭名昭著,那么租赁价格肯定会高于所有其他级别的普通服务器。 2、 服务器防御 租用服务器的成本与其安全保护能力成正比。例如,移动游戏和金融易受DDoS和…

基于python+django的宠物商店-宠物管理系统源码+运行步骤

该系统是基于pythondjango开发的宠物商店-宠物管理系统。是给师妹开发的课程作业。现将源码开放给大家。大家学习过程中,如遇问题可以在github咨询作者。加油 演示地址 前台地址: http://pet.gitapp.cn 后台地址: http://pet.gitapp.cn/adm…

AI绘画(Stable Diffusion)喂饭级教程

AI绘画(Stable Diffusion)喂饭级教程 2022年8月,一款叫Stable Diffusion的AI绘画软件开源发布,从此开启了AIGC在图像上的爆火发展时期 一年后的今天,率先学会SD的人,已经挖掘出了越来越多AI绘画有趣的玩法 从开始的AI美女、线稿…

libGL.so.1: cannot open shared object file: No such file or directory-linux022

in <module> from PyQt5.QtGui import QPixmap, QFont, QIcon ImportError: libGL.so.1: cannot open shared object file: No such file or directory 这个错误信息表示XXXX 在启动时遇到问题&#xff0c;缺少 libGL.so.1 文件。libGL.so.1 是与 OpenGL 图形库相关的共…

CCF CSP (2020.06_1_线性分类器_C++)(暴力破解)

CCF CSP 2020.06_1_线性分类器_C 题目描述&#xff1a;解题思路&#xff1a;思路一&#xff08;暴力破解法&#xff09;&#xff1a; 代码实现代码实现&#xff08;暴力破解法&#xff09;&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 思路一&#xff08;暴力破解…