前言

在HarmonyOS中,可以通过以下方法放大缩小视图:

  1. 使用缩放手势:可以使用双指捏合手势来放大缩小视图。将两个手指放在屏幕上,并向内或向外移动手指,即可进行放大或缩小操作。

  2. 使用系统提供的缩放控件:在HarmonyOS的开发中,可以使用系统提供的缩放控件来实现视图的放大缩小功能。通过在布局文件中添加缩放控件,并设置合适的属性,即可实现视图的放大缩小效果。

  3. 使用自定义动画效果:通过在代码中编写自定义的动画效果,可以实现视图的放大缩小功能。可以使用属性动画或帧动画来实现视图的动态缩放效果。

本文主要讲解的是动画效果实现的放大缩小视图

一、放大缩小视图

共享元素转场是一种页面之间过渡效果的设计,通过在不同页面之间共享相同的元素来实现平滑的过渡动画。在共享元素转场中,通过在两个页面中配置相同id的组件作为共享元素,实现元素的位置、大小等属性的过渡。当用户从起始页跳转到目标页时,共享元素会从起始页的位置、大小过渡到目标页的位置、大小,从而创建一种衔接的动画效果。共享元素转场可以提升用户体验,使页面之间的切换更加流畅和自然。

1.Exchange类型的共享元素转场

对于交换型的共享元素转场,需要在两个页面中存在通过sharedTransition函数配置为相同id的组件,这些组件被称为共享元素。这种类型的共享元素转场适用于两个页面之间相同元素的衔接,会从起始页共享元素的位置和大小过渡到目标页的共享元素的位置和大小。如果没有指定类型,默认为交换类型的共享元素转场,这也是最常见的共享元素转场方式。当使用交换类型的共享元素转场时,共享元素转场的动画参数由目标页中的options动画参数决定。

2.Static类型的共享元素转场

静态型的共享元素转场通常适用于页面跳转时,标题逐渐出现或隐藏的场景。在这种转场中,只需要在一个页面中存在一个Static类型的共享元素,不能在两个页面中同时存在相同id的Static类型共享元素。当跳转到目标页时,配置了Static类型sharedTransition的组件会显示透明度从0渐变到设定的透明度的动画效果,而位置保持不变。当起始页消失时,该组件将逐渐变为0的透明度,位置仍保持不变。这样的转场效果能够呈现出标题逐渐显示或隐藏的效果。

更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

3.场景示例

主页

// src page
import router from '@ohos.router'; @Entry
@Component
struct SharedTransitionSrc {
build() {
Column() {
// 配置Exchange类型的共享元素转场,共享元素id为"sharedImage1"
Image($r('app.media.img_2')).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)
}
}

子页

// 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.img_2'))
.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时长进行共享元素转场,使标题逐渐隐藏。

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing,不定期分享原创知识。
  • 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

鸿蒙HarmonyOS实战-ArkUI动画(放大缩小视图)的更多相关文章

  1. CSS3圆圈动画放大缩小循环动画效果

    代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  2. keyframes 放大缩小动画

    本次项目中动画放大缩小代码小结 .fix .phone{ -moz-animation: myfirst 1s infinite; -webkit-animation: myfirst 1s infi ...

  3. css3 放大缩小代码

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. svg 动画 透明度 放大缩小 x轴Y轴

    参考链接:https://www.cnblogs.com/Chrimisia/p/6670303.html vue 中封装svg:http://www.cnblogs.com/Jiangchuanwe ...

  5. Ionic实战三:Ionic 图片预览可放大缩小左右滑动demo-iClub图片预览

    这个demo的主要功能有两个,一个是首页的导航向上拉动会浮动在最上面的效果,另一个就是我们平时非常实用的功能,就是图片预览功能 点击可以放大图片,并且可以左右滑动,还可以双击放大缩小图片以及双手指控制 ...

  6. 最全华为鸿蒙 HarmonyOS 开发资料汇总

    开发 本示例基于 OpenHarmony 下的 JavaScript UI 框架,进行项目目录解读,JS FA.常用和自定义组件.用户交互.JS 动画的实现,通过本示例可以基本了解和学习到 JavaS ...

  7. 手把手教你打造ImageView支持手势放大缩小

    写在前面 最近有了新的任务,学习的时间比以前少了不少,Java回炉的文估计是得缓缓了,不过每周一篇尽量保质保量.最近感觉我文写的有点不好,因为我写东西除非必要,不然概念性的东西我基本上都是一笔带过…… ...

  8. CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)

    出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...

  9. Android 图片的放大缩小拖拉

    package com.example.ImageView; import android.annotation.SuppressLint; import android.content.Contex ...

  10. 制作一个顶部图片可以拉伸放大缩小效果的tableViewHeader

    最近负责公司项目个人中心的项目模块研发,首页是一个头部图片可以拉伸放大缩小效果的tableViewHeader,今天这个demo和教程我增加了模糊效果和头像缩小效果.具体效果如图: 如果这个效果是想要 ...

随机推荐

  1. ble的notification和indication的区别和联系

    Ble服务端传输消息有两个常用手段,notification和indication.那么这两者之间有什么区别呢? Notification 不需要应答,所以服务端发送的消息,它自己并不知道消息是否发送 ...

  2. [LeetCode] 5933. k 镜像数字的和

    一.摘要 本文介绍了一种通过模拟寻找十进制镜像数字,然后判断其对应的k进制表示是否也是镜像的方法.具体来讲即从小到大遍历10进制的镜像数字,然后对10进制镜像数字转为k进制,然后判断转为k进制后是否还 ...

  3. 捉虫日记 | MySQL 8.0从库某些情况下记录重放的CREATE TABLE、DROP TABLE语句到慢日志(slow log)

    作者:卢文双 资深数据库内核研发 本文首发于 2023-11-30 20:47:35 https://dbkernel.com 问题描述 当主从复制采用 binlog 的行模式时,如果从库启用 slo ...

  4. C++ Qt开发:QUdpSocket网络通信组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUd ...

  5. 记录--让URL地址都变成了"ooooooooo"

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 发现一个很有创意的小工具网站,如封面图所示功能很简单,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以 ...

  6. 带你快速入坑ES6

    一.了解ES6 1)ES6官网:http://www.ecma-international.org/ecma-262/6.0/ 2)Javascript是ECMAScript的实现和扩展 3)ES学习 ...

  7. Anaconda使用教程

    0 写在前面 以下命令都是在命令行模式下进行操作,macOS和Linux用户可以直接打开Terminal终端,Windows用户如果配置了环境变量则可以直接打开cmd,否则需要打开Anaconda P ...

  8. KingbaseES V8R3数据库运维案例之---不完整的启动包(incomplete startup packet)复现

    案例说明: 在KingbaseES V8R3数据库的sys_log日志中,出现以下故障信息"不完整的启动包(incomplete startup packet)"日志信息.本案例复 ...

  9. C++设计模式 - 原型模式(Prototype)

    对象创建模式 通过"对象创建" 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式 Fac ...

  10. 测试开发之前端篇-CSS层叠式样式表

    CSS是层叠样式表(Cascading Style Sheets)的缩写,用于描述如何在屏幕.纸张或其他媒体上显示HTML元素,包括了定义网页及其元素的布局.风格.大小.位置和颜色等属性. CSS的语 ...