动画可以为一个属性设置动画。 但是,通常想要同时或一个接一个地运行多个动画,或者在两个动画之间执行脚本。为此,出现了分组动画。

分组动画可以通过两种方式进行分组:并行或顺序。这两种方式分别对应ParallelAnimation和SequentialAnimation元素,这两个元素用作其他动画元素的容器。

一、并行动画ParallelAnimation

并行动画将所有子动画并行运行。 所以,使用ParallelAnimation可以同时将不同的属性的子动画同时运行。

示例

import QtQuick 2.5Rectangle {id:rootwidth: 640height: 480property int duration:4000property Item ufo: ufoImage {id: bgsource: "./ufo_background.png"anchors.fill: parent}MouseArea {//点击背景复位anchors.fill: parentonClicked: {ufo.x=20ufo.y=root.height-ufo.height}}Clickableimg {id:ufox:20y:root.height-height;text: "ufo"source: "./ufo.png"onClicked: {anim.restart()}Behavior on x {//不会忽然变化,始终保持四秒渐变NumberAnimation {duration: root.duration}}Behavior on y {NumberAnimation {duration: root.duration}}}ParallelAnimation {id:animNumberAnimation {target: ufoproperty: "x"duration: root.durationto:400easing.type: Easing.InOutQuad}NumberAnimation {target: ufoproperty: "y"duration: root.durationto:20easing.type: Easing.InOutQuad}}
}

二、顺序动画SequentialAnimation

将上述代码中的ParallelAnimation改为SequentialAnimation,就是顺序动画,先执行x,再执行y,效果如下

分组动画也可以嵌套,例如,顺序动画可以具有两个并行动画作为子动画

示例

该示例是一个足球水平方向从左至右,然后垂直方向是一条类似三角函数的曲线,在运动过程中还要发生旋转,整个过程持续4s

import QtQuick 2.5Item {id: rootwidth: 640height: 480property int duration: 4000Rectangle {id:sky//天空描述width: root.widthheight: root.height-180gradient: Gradient {GradientStop {position: 0.0color: "blue"}GradientStop {position: 1.0color: "gray"}}}Rectangle {id:grass//草地描述width: root.widthheight: root.height-sky.height//y:sky.heightanchors.top: sky.bottom//草地与天空的布局anchors.bottom: root.bottomgradient: Gradient {GradientStop {position: 0color: "green"}GradientStop {position: 1color: "yellow"}}}Image {//足球描述id: ballsource: "./soccer_ball.png"x:0y:root.height-height*0.8scale: 0.5MouseArea {anchors.fill: parentonClicked: {ball.x=20ball.y=root.height-ball.heightball.rotation=0anim.restart()}}}ParallelAnimation {//足球动画描述id:animSequentialAnimation {//垂直方向上的动画NumberAnimation {//先上升到y=20target: ballproperty: "y"to:20duration: root.duration/2easing.type: Easing.OutCirc}NumberAnimation {//然后下落并设置缓动曲线为反弹target: ballproperty: "y"to:root.height-ball.height*0.8duration: root.duration/2easing.type: Easing.OutBounce//}}//y方向上的描述时间各占一半NumberAnimation {//水平方向运动target: ballproperty: "x"duration: root.durationto:root.width-ball.widtheasing.type: Easing.InOutQuad}RotationAnimation {//足球的旋转target: ballproperty: "rotation"to:1080duration: root.duration}}
}

参考

《qml book》

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

5.QML动画——分组动画相关推荐

  1. QML动画分组(Grouped Animations)

    通常使用的动画比一个属性的动画更加复杂.例如你想同时运行几个动画并把他们连接起来,或者在一个一个的运行,或者在两个动画之间执行一个脚本.动画分组提供了很好的帮助,作为命名建议可以叫做一组动画.有两种方 ...

  2. 粘土服务器怎么加按键显示,磐信定格动画(粘土动画)方案(14页)-原创力文档...

    磐信定格动画系统(粘土动画) 定格动画(stop-motion Animation)是通过创作人员使用黏土. 橡皮泥.硅胶.速成钢等材料,塑造成立体的偶,然后一边变动动作 一边逐格拍摄.从角色造型制作 ...

  3. 【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )

    文章目录 ◯.AnimatedBuilder 引入 一.创建动画控制器 二.创建动画 三.创建动画作用的组件 四.创建 AnimatedBuilder 关联动画与组件 五.动画运行 六.完整代码示例 ...

  4. 【Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件 | 动画运行 )

    文章目录 ◯.AnimatedWidget 组件引入 一.创建 AnimatedWidget 动画组件 二.创建动画控制器 三.创建动画 四.动画运行 五.完整代码示例 六.相关资源 Animated ...

  5. 【Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )

    文章目录 一.创建动画控制器 二.创建动画 三.设置值监听器 四.设置状态监听器 五.布局中使用动画值 六.动画运行 七.完整代码示例 八.相关资源 Flutter 动画基本流程 : ① 创建动画控制 ...

  6. 【Flutter】Animation 动画 ( Flutter 动画的核心类 | Animation | CurvedAnimation | AnimationController | Tween )

    文章目录 一.动画的核心类 Animation 二.动画的核心类 CurvedAnimation 三.动画的核心类 AnimationController 四.动画的核心类 Tween 五.相关资源 ...

  7. 【Flutter】Animation 动画 ( Flutter 动画类型 | Flutter 动画的核心类 )

    文章目录 一.Flutter 动画类型 二.Flutter 动画的核心类 三.相关资源 Flutter Animation 动画 : Flutter 动画类型 为 Widget 组件添加动画 为动画添 ...

  8. GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

    1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView ...

  9. [Android]Fragment自定义动画、动画监听以及兼容性包使用

    Fragment是Android在API 11之后加入的一个组件,对提高Android开发中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕设备的开发中,Fragment的引入能 ...

最新文章

  1. 对输入框以及选择框集体的数据检验
  2. UVA11400 照明系统设计 Lighting System Design(线性DP)
  3. Linux Shell脚本之向脚本传递参数
  4. 开源前后端分离在线考试系统
  5. IntelliJ IDEA 2019.2最新解读:性能更好,体验更优,细节处理更完美!
  6. 陕西省天然气行业十四五建设展望及发展战略规划报告2021版
  7. 处理字符串_8_判断字符串含有汉字
  8. 好爽 java_Intellij是进行scala开发的一个非常好用的工具,可以非常轻松查看scala源码,当然用它来开发Java也是很爽的,之前一直在用scala ide和ec...
  9. [转载] 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围
  10. Linux内核网络协议栈4-创建socket(2)
  11. 传统的分布式应用集成技术(网摘)
  12. 动态规划(树形DP):HDU 5886 Tower Defence
  13. 安装报错_Mysqlclient安装报错的3种情况
  14. Unity世界坐标转换屏幕坐标(概览)
  15. java 树什么意思是什么意思是什么_Java数据结构和算法 - 什么是2-3-4树
  16. [转载]快速提高你修养的100句话,值得你珍藏
  17. 离线地图for SQLite
  18. 从IO谈论编程的基础
  19. 微信公众号之海量资料
  20. 宇宙最简单排序:桶排序

热门文章

  1. wayos利用easyradius实现WEB认证页面的记住密码及到期提醒功能
  2. 基于python的快速傅里叶变换FFT(一)
  3. 重新格式化NameNode后,DataNode启动不起来问题解决
  4. 最小生成树(kruskal+prime)
  5. WPF第一章(XAML前台标记语言(Chapter02代码讲解))
  6. springboot整合mybatis分页插件
  7. aaaaaaaaaaa
  8. 使用cnpm代替npm
  9. 动手动脑——登录界面
  10. C#调用API向外部程序发送数据(转载)