首页 > 其他分享 >鸿蒙动画开发04——共享元素转场动画

鸿蒙动画开发04——共享元素转场动画

时间:2024-12-15 18:09:48浏览次数:11  
标签:动画 04 鸿蒙 元素 共享 转场 id 页面

1 概    述

在不同页面间,有使用相同的元素(例如有同一幅图)的场景,可以使用共享元素转场动画衔接。

为了突出不同页面间相同元素的关联性,可为它们添加共享元素转场动画。如果相同元素在不同页面间的大小有明显差异,即可达到放大缩小视图的效果。

例如:有两个页面,A页面只展示一张图片,当我们在A页面点击图片后,进入B页面,此时B页面中居中放大展示了相同的图片,同时还有一些其他的文字,效果如下:

图片

2 接口介绍

两个页面中id值相同且不为空字符串的组件即为共享元素,在页面转场时可显示共享元素转场动效。
共享元素转场的接口定义如下:

sharedTransition(id: string, options?: sharedTransitionOptions)

两个参数分别介绍如下:

  • id:两个页面共享元素的id;

  • options的结构如下:

{
  duration?: number, // 动画播放时长
  curve?: Curve | string, // 动画曲线
  delay?: number, // 初始延迟时间
  motionPath?: { // 运动路径信息
    path: string,
    form?: number,
    to?: number,
    rotatable?: boolean
  },
  zIndex?: number,
  type?: SharedTransitionEffectType // static、Exchange
}

其中根据sharedTransitionOptions中的type参数,共享元素转场分为Exchange类型的共享元素转场和Static类型的共享元素转场。

Exchange共享元素转场

交换型的共享元素转场,需要两个页面中,存在通过sharedTransition函数配置为相同id的组件,它们称为共享元素。

这种类型的共享元素转场适用于两个页面间相同元素的衔接,会从起始页共享元素的位置、大小过渡到目标页的共享元素的位置、大小。

如果不指定type,默认为Exchange类型的共享元素转场,这也是最常见的共享元素转场的方式。

使用Exchange类型的共享元素转场时,共享元素转场的动画参数由目标页options中的动画参数决定。

Static元素转场

静态型的共享元素转场通常用于页面跳转时,标题逐渐出现或隐藏的场景,只需要在一个页面中有Static的共享元素,不能在两个页面中出现相同id的Static类型的共享元素。

在跳转到该页面(即目标页)时,配置Static类型sharedTransition的组件做透明度从0到该组件设定的透明度的动画,位置保持不变。在该页面(即起始页)消失时,做透明度逐渐变为0的动画,位置保持不变。

共享元素转场的动画参数由该组件sharedTransition属性中的动画参数决定。

页面间转场动画

3 Demo

结合Exchange共享元素转场与Static元素转场,我们可以实现概述中的效果。代码如下:

PageA(第一个页面)代码如下:

// src page
import router from '@ohos.router';

@Entry
@Component
struct SharedTransitionSrc {
  build() {
    Column() {
      // 配置Exchange类型的共享元素转场,共享元素id为"sharedImage1"
      Image($r('app.media.mountain')).width(50).height(50)
        .sharedTransition('sharedImage1', { duration: 1000, curve: Curve.Linear })
        .onClick(() => {
          // 点击小图时路由跳转至下一页面
          router.pushUrl({ url: 'pages/myTest/sharedTransitionDst' });
        })
    }
    .padding(10)
    .width("100%")
    .alignItems(HorizontalAlign.Start)
  }
}

PageB(跳转后的页面)代码如下:

// dest page
import router from '@ohos.router';
@Entry
@Component
struct SharedTransitionDest {
  build() {
    Column() {
      // 配置Static类型的共享元素转场
      Text("SharedTransition dest page")
        .fontSize(16)
        .sharedTransition('text', { duration: 500, curve: Curve.Linear, type: SharedTransitionEffectType.Static })
        .margin({ top: 10 })

      // 配置Exchange类型的共享元素转场,共享元素id为"sharedImage1"
      Image($r('app.media.mountain'))
        .width(150)
        .height(150)
        .sharedTransition('sharedImage1', { duration: 500, curve: Curve.Linear })
        .onClick(() => {
          // 点击图片时路由返回至上一页面
          router.back();
        })
    }
    .width("100%")
    .alignItems(HorizontalAlign.Center)
  }
}

上述示例中,第一个页面(src page)和第二个页面(dest page)都配置了id为"sharedImage1"的共享元素转场,使两个页面能匹配到这一组共享元素。

从第一个页面跳转到第二个页面时,第一个页面为起始页,第二个页面为目标页。配置id为"sharedImage1"的组件按照目标页中500ms的时长进行共享元素转场,达到放大视图的效果,id为"text"的组件按照配置的Static类型sharedTransition参数中的500ms的时长进行共享元素转场,标题逐渐出现。

从第二个页面返回到第一个页面时,第二个页面为起始页,第一个页面为目标页。配置id为"sharedImage1"的组件按照目标页中1000ms的时长进行共享元素转场,缩小为原始视图,id为"text"的组件按照配置的Static类型sharedTransition参数中的500ms的时长进行共享元素转场,标题逐渐隐藏。

示例效果如下:

图片

标签:动画,04,鸿蒙,元素,共享,转场,id,页面
From: https://www.cnblogs.com/harmonyClassRoom/p/18608275

相关文章

  • 鸿蒙UI系统组件01——文本组件(Text/Span)
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!点击下面的名片关注公众号。1、概述Text是文本组件,是我们开发UI界面中最常见的组件之一,通常用于展示用户的视图,如显示文章的文字。下面将对文本组件展开介绍。2、创建文本Text可通过以下两种方式来创建:string字符串Text('......
  • 鸿蒙NEXT开发案例:经纬度距离计算
     【引言】在鸿蒙NEXT平台上,我们可以轻松地开发出一个经纬度距离计算器,帮助用户快速计算两点之间的距离。本文将详细介绍如何在鸿蒙NEXT中实现这一功能,通过简单的用户界面和高效的计算逻辑,为用户提供便捷的服务。【环境准备】•操作系统:Windows10•开发工具:DevEcoStudio......
  • 如何在 PbootCMS 中自定义前台 404 错误页面?
    在PbootCMS中,自定义前台404错误页面非常简单。PbootCMS已经内置支持自定义内容地址错误情况下错误页面的自定义功能。您只需要在站点根目录下定义一个 404.html 文件即可。以下是详细的步骤和注意事项:创建404.html文件:登录到您的FTP客户端或通过服务器管理工具,导......
  • 043_Tcpip Instruments in Matlab中连接和调试采用TCP/IP协议的仪器
    A:师兄,Matlab可以做什么?B:除了生孩子,什么都会。(这下你懂师兄的意思了吧)A:【星星眼】哦,那我还是可以帮兰陵王生孩子!B:【倒】先来一点跟Matlab无关的内容,现在很多仪器做得非常先进,只需要两根线,一根电源线,一根网线(RJ45)。连接到交换机,就能通过TCP/IP或者UDP协议控制仪器、......
  • Ubuntu22.04 LTS 部署harbor-v2.7.2高可用
    Ubuntu22.04LTS部署harbor高可用环境准备均需要docker环境IP主机名10.0.0.20harbor0110.0.0.21harbor02一、harbor环境部署1.下载harbor包[root@harbor01:~]#wgethttps://github.com/goharbor/harbor/releases/download/v2.7.2/harbor-offline-insta......
  • 游戏产业加速鸿蒙化步伐:超1800款鸿蒙原生游戏已上架
    2024年度中国游戏产业年会于12月12日至13日北京市首钢国际会展中心举办,华为终端云全球生态发展与销售部副总裁张思建受邀出席主论坛,并发表了主题演讲。同期,由华为游戏中心主办的鸿蒙游戏行业论坛也在北京石景山区举行,本次活动邀请了中国音像与数字出版协会常务副理事长兼秘书长敖......
  • PROG2004 ObjectOriented Programming
    AssessmentBriefPROG2004ObjectOrientedProgrammingModule4–AdvancedexceptionhandlingThefollowingpartoftheassessmentcoversthecontentinModule4.Part4–ImplementingexceptionhandlingAtthemoment,youhavenotimplementedanyexceptionhan......
  • 代码随想录训练营第十五天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 22
    110.平衡二叉树题目链接:110.平衡二叉树-力扣(LeetCode)讲解链接:代码随想录 求高度不是求深度高度需要从下到上(后序遍历)深度需要从上到下(先序遍历)Java代码:classSolution{publicbooleanisBalanced(TreeNoderoot){//递归做法returngetHeight......
  • arcgis中常用公式汇总04—自动生成标识码
    一般建库中标识码编号规则为:行政区代码(6位)+扩展码(4位)+顺序码(8位),如北京东城区的行政区代码为110101,那么标识码一般从110101000000000001开始往后递增。打开属性表,在BSM处“右键—字段计算器”,选择“python”,勾选代码块,输入代码(如下);也可以将代码存为*cal格式的文件,后面需要再次......
  • 部署上线的项目,正常点击可以访问,刷新页面就404,怎么解决?
    遇到在正常点击可以访问,但刷新页面就返回404错误的问题,通常是因为前端路由和后端路由的配置不一致,尤其是在单页应用(SPA,SinglePageApplication)中。以下是一些可能的解决方案,具体取决于你使用的技术栈:1.确保后端路由支持刷新如果你在前端使用了如Vue、React或Angular......