HarmonyOS 中的 sharedTransition:实现流畅的页面过渡动画

在移动应用开发中,页面之间的过渡动画是提升用户体验的关键因素之一。HarmonyOS 提供了 sharedTransition 功能,让开发者能够轻松实现元素在不同页面间的平滑过渡效果,创造出连贯且引人入胜的用户体验。

什么是 sharedTransition?

sharedTransition(共享元素过渡)是一种动画效果,它允许在两个页面之间共享一个或多个元素,并在页面切换时平滑地变换这些元素的位置、大小和其他属性。这种技术可以让用户感觉元素是"流动"的,而不是突兀地切换页面,极大地增强了界面的连贯性和视觉吸引力。

基本使用方法

使用 sharedTransition 非常简单,只需遵循以下步骤:

  1. 在源页面和目标页面中为需要共享的元素添加相同的 sharedTransition 标识
  2. 配置过渡动画的参数(如持续时间等)
  3. 正常进行页面路由跳转

下面是一个完整的示例,展示了如何在两个页面之间实现图片的共享元素过渡:

Index.ets

import { router } from '@kit.ArkUI'@Component
@Entry
struct Index {build() {Column() {// 源页面中的图片,添加sharedTransition标识Image('https://i2.chuimg.com/a1cb7a48a56011e6947d0242ac110002_200w_200h.jpg').width(100).onClick(() => {// 跳转到目标页面router.pushUrl({url: 'pages/PageImage'})})// 共享元素标识为"abc",过渡持续时间500ms.sharedTransition("abc", { duration: 500 })}.width("100%").height("100%").justifyContent(FlexAlign.Center)}
}

PageImage.ets

@Entry
@Component
struct PageImage {build() {RelativeContainer() {// 目标页面中的图片,使用相同的sharedTransition标识Image('https://i2.chuimg.com/a1cb7a48a56011e6947d0242ac110002_200w_200h.jpg').width("90%")// 必须使用与源页面相同的标识"abc".sharedTransition("abc", { duration: 500 })}.height('100%').width('100%')}
}![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1dc4a7db3c6843a0a2cbfa1640ad0ae4.gif#pic_center)

代码解析

在上面的示例中,我们实现了一个简单但完整的共享元素过渡效果:

  1. 源页面 (Index.ets)

    • 包含一个小尺寸(100px)的图片
    • 为图片添加了 sharedTransition 修饰器,标识为 “abc”
    • 设置了点击事件,点击时跳转到 PageImage 页面
    • 配置了过渡动画持续时间为 500ms
  2. 目标页面 (PageImage.ets)

    • 包含同一张图片,但尺寸更大(90% 宽度)
    • 同样为图片添加了 sharedTransition 修饰器,使用相同的标识 “abc”
    • 保持与源页面相同的过渡动画配置

当用户点击源页面中的图片时,HarmonyOS 会自动执行以下操作:

  • 识别到两个页面中具有相同 sharedTransition 标识的元素
  • 计算元素从源状态到目标状态的变化(位置、大小等)
  • 自动生成并执行平滑的过渡动画
  • 完成页面切换

进阶配置选项

sharedTransition 还提供了更多配置选项来定制过渡效果:

.sharedTransition("identifier", {duration: 500,       // 动画持续时间(ms)curve: Curve.EaseIn, // 动画曲线delay: 100,          // 动画延迟时间(ms)type: SharedTransitionType.MOVE   // 过渡类型
})

其中,SharedTransitionType 支持多种过渡类型:

  • MOVE:元素移动并变换大小
  • FADE:元素淡入淡出
  • SCALE:元素缩放
  • NONE:无过渡效果

最佳实践

  1. 保持元素一致性:确保共享元素在两个页面中具有相似的内容或含义,避免让用户感到困惑

  2. 控制过渡时长:一般来说,300-500ms 的过渡时间比较合适,过短会显得仓促,过长会让用户感到拖沓

  3. 避免过度使用:不是所有元素都需要共享过渡效果,过多的过渡动画会分散用户注意力

  4. 测试不同场景:确保在不同屏幕尺寸和分辨率下,过渡效果依然流畅自然

总结

sharedTransition 是 HarmonyOS 提供的一个强大功能,它能够以最少的代码实现高质量的页面过渡动画。通过本文的示例和讲解,你应该已经掌握了其基本用法和一些进阶技巧。

合理使用 sharedTransition 可以显著提升应用的用户体验,让你的应用在视觉表现上更上一层楼。尝试在你的项目中应用这一技术,创造出更加流畅和吸引人的界面效果吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94854.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94854.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94854.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器】Apache Superset MCP接入与使用

1. 概述 Apache Superset MCP 集成(superset-mcp)是一个基于 Model Control Protocol(MCP)的服务器工具,旨在实现 AI 代理与 Apache Superset 的程序化交互。该项目通过提供标准化的工具接口,使 AI 助手&a…

Postman接口测试:postman设置接口关联,实现参数化

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快postman设置接口关联在实际的接口测试中,后一个接口经常需要用到前一个接口返回的结果, 从而让后一个接口能正常执行,这个过程的…

第一个,QT版本问题:no member named SkipEmptyParts‘in namespace ‘Qt

这是我朋友给我发过来的代码,但是在我电脑上报错了,遇到的问题是 Qt 版本兼容导致的编译错误。这是因为我的是5.12版本,他的是6.4版本,Qt::SkipEmptyParts只能在6版本使用,无法在5.12甚至更早的版本使用,具…

【PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)】

PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)引言ExecBuildHash32FromAttrs示例 SQL 查询函数运行流程与代码解释最终 ExprState 结构执行示例总结ExecComputeSlotInfo示例 SQL 查询函数注释与解释作用参数返回值执行…

技术分析 | Parasoft C/C++test如何突破单元测试的隔离难题

单元测试是保证软件质量的第一道防线,但其推行往往面临两大阻力:一是编写和维护测试用例耗时费力,二是难以与现有项目和团队习惯无缝集成。Parasoft C/Ctest 通过其强大的图形化测试创建能力、自动桩函数技术以及卓越的生态集成性&#xff0c…

K8S架构与组件完全解析

目录 K8S-组件介绍 一、概述 K8S的由来 K8S的功能 K8S解决的问题 K8S的特性 二、K8S架构与组件 K8S架构 K8S组件 master 节点组件 Kube-apiserver Kube-controller-manager Kube-scheduler etcd node节点组件 Kubelet Kube-Proxy Controller Runtime Pod 三…

Jenkins 执行器(Executor)并发数量修改

Jenkins 执行器(Executor)并发数量修改一、什么是 Jenkins 执行器(Executor)?二、为什么默认是 2?三、如何修改 Jenkins 执行器数量?1. 进入 Jenkins 管理页面2. 找到节点配置3. 选择需要修改的…

vue3使用reactive和ref

<script setup>import { ref } from vueconst count ref(0) console.log(count.value)</script><template></template>ref需要注意&#xff0c;在script脚本区域需要加上.value&#xff0c;然后在template模板区域使用不需要带.value

(笔记)InputChannel跨进程传输机制深度分析

概述 InputChannel是Android输入系统中负责跨进程事件传输的核心组件&#xff0c;它建立了InputDispatcher&#xff08;SystemServer进程&#xff09;与应用程序&#xff08;App进程&#xff09;之间的高效通信通道。本文深入分析InputChannel的实现机制&#xff0c;包括socket…

AI实时故障诊断系统(实时采集信号)

1.摘要 本文设计了一套“基于Labview的旋转机械信号分析与故障诊断系统&#xff08;可部署AI模型和实时监测设备运行状态&#xff09;”。首先&#xff0c;LabVIEW 端构建了信号采集与设备状态实时监测模块和本地数据故障诊断模块。该系统实现了“数据采集、数据处理、时频域特…

【51单片机】【protues仿真】基于51单片机篮球计时计分器数码管系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、数码管显示 1、比赛时间为15&#xff1a;00&#xff0c;甲乙队比分默认000&#xff0c;通过按键修改 3、比赛运行的状态下&#xff0c;按开始暂停键&#xff0c;比赛暂停&#…

[读论文]Hunyuan 3D 系列

1.0&#xff1a; &#xff08;adaptive clasisfier guidance&#xff0c;input 输入一个没cam的branch&#xff1b;提高triplane分辨率&#xff09; 总结&#xff1a; 大规模再train zero123&#xff0c;但角度设置不同&#xff1b;adaptive clasisfier guidance&#xff08;f…

深入理解文本向量嵌入(Vector Embeddings):原理、实践与应用场景

深入理解文本向量嵌入&#xff08;Vector Embeddings&#xff09;&#xff1a;原理、实践与应用场景 1. 什么是向量嵌入&#xff1f; 文本向量嵌入&#xff08;Vector Embedding&#xff09;是一种将文本转化为数值向量的技术&#xff0c;使得字符串之间的关联性可以通过数值…

微论-神经网络中记忆的演变

从微突触到宏认知&#xff1a;论神经网络中记忆的生成、固化与演化人脑的智能&#xff0c;并非源于单个神经元的孤立活动&#xff0c;而是诞生于由万亿突触连接所构成的庞大而复杂的网络动态之中。在这个网络中&#xff0c;连接权重的强度分布——即强的约束与弱的变数——共同…

机器视觉学习-day07-图像镜像旋转

图像的镜像旋转分为三种&#xff0c;分别使用filpcode的参数表示&#xff1a;flipcode0&#xff0c;垂直翻转&#xff08;x轴为中线&#xff09; 垂直翻转可以把src沿着x轴翻转&#xff0c;坐标从&#xff08;x,y&#xff09;翻转为(x,-y)。flipcode>0&#xff0c;水平翻转&…

Python备份实战专栏第2/6篇:30分钟搭建企业级API认证系统,安全性吊打90%的方案

30分钟搭建企业级API认证系统&#xff0c;安全性吊打90%的方案 专栏导语&#xff1a;《从零到一&#xff1a;构建企业级Python Web自动化备份系统实战指南》第2篇 作者简介&#xff1a;madechango架构师&#xff0c;负责设计零安全事故的API认证系统&#xff0c;拦截100%非法请…

第6篇:链路追踪系统 - 分布式环境下的请求跟踪

项目地址&#xff1a;https://github.com/nemoob/atlas-log 开箱即用。前言 在微服务架构中&#xff0c;一个用户请求往往会经过多个服务的协作处理。本章将实现一个轻量级的链路追踪系统&#xff0c;让日志具备分布式追踪能力。 分布式链路追踪基础概念 链路追踪的核心价值 #m…

ubuntu25.04编译最新版本qgroundcontrol

编译系统版本: 编译器版本: 编译成功效果

如何在 Docker 和AKS上使用 IIS

前言 在我们的一个客户项目中,我们有一个混合 Swarm 集群,其中包含 Linux 和 Windows 节点。在 Windows 节点上,我们运行了许多 IIS 容器,这些容器运行着多个 Web 应用程序。在这篇博文中,我想向您展示在 Docker 容器中将网站部署到 IIS 上是多么简单。 Internet 信息服…

uniapp 页面favicon.ico文件不存在提示404问题解决

1. uniapp 页面favicon.ico文件不存在提示404问题解决 1.1. 场景 在uniapp中经常出现的&#xff0c;因为找不到 favicon.ico 而报404错误的问题。 GET http://localhost:5174/favicon.ico 404 (Not Found)1.2. 问题原因 在document.ejs中使用link标签相对路径引入文件。 <…