所有的动画组件都是继承于Animation,所以我们先来介绍下它们的父组件Animation.
1.Animation
需要注意的是如果直接使用Animation将导致错误。它的存在只是为了给子组件提供一组公共属性和方法,这些属性和方法可在继承自它的所有其他动画类型中使用。
Properties
Signals
Methods
测试alwaysRunToEnd属性
由于Animation是虚组件,不能直接使用,所以我们以它的子组件PropertyAnimation为例:
Column { Button { text: "启动动画" onClicked: { animation.start() } } Button { text: "停止动画" onClicked: { animation.stop() } } Rectangle { id: rect width: 20 height: 20 color: "#000000" PropertyAnimation { id:animation; loops: Animation.Infinite alwaysRunToEnd: true target: rect property: "x" from: 0; to: 100; duration: 500 } } }
当我们启动动画后,点击停止动画按钮时,此时必须到了终点才停止.
2.PropertyAnimation - 改变property属性时可以产生的动画
PropertiesAniation用来给target目标下的property属性更改分配一个动画的组件.它的父组件是Animation
Properties
示例如下所示:
Column { Button { text: "启动动画" onClicked: { animation.start() } } Button { text: "停止动画" onClicked: { animation.stop() } } Rectangle { id: rect1 width: 20 height: 20 color: "#0000FF" } Rectangle { id: rect2 width: 20 height: 20 color: "#FF0000" } } PropertyAnimation { id:animation; loops: Animation.Infinite alwaysRunToEnd: true targets: [rect1,rect2] property: "x" easing.type: Easing.InQuad from: 0; to: 100; duration: 2000 }
当我们点击启动按钮后,就会启动rect1和rect2的x属性从坐标0到100进行移动的动画.
假如一个动画只针对一个目标对象的一个属性,那么我们可以使用 XXXAnimation on Property { ... }写法,这样就不需要指定target和property了,更加便捷:
Column { Button { text: "启动动画" onClicked: { animation.start() } } Button { text: "停止动画" onClicked: { animation.stop() } } Rectangle { id: rect1 width: 20 height: 20 color: "#00FF00" PropertyAnimation on x { id:animation; loops: Animation.Infinite alwaysRunToEnd: true easing.type: Easing.InQuad running: false from: 0; to: 100; duration: 2000 } } }
需要注意的是该写法的running是默认为true,所以如果不想立即启动动画,则需要初始化为false.
NumberAnimation和ColorAnimation
它们都是继承于PropertyAnimation组件,然后重写了from和to属性,使用方法其实和PropertyAnimation一样.
示例如下所示:
MouseArea { id: area anchors.fill: parent onPressed: { colorAnimation.to = Qt.rgba(Math.random(),Math.random(),Math.random(),1) // 重新赋一个颜色 numberAnimation.restart() } } Rectangle { id: rect anchors.centerIn: parent color: "#00FF00" width: 20 height: 20 NumberAnimation on width{ id: numberAnimation duration: 300 to: rect.width*1.3 running: false } ColorAnimation on color{ id: colorAnimation duration: 300 to: Qt.rgba(Math.random(),Math.random(),Math.random(),1) running: numberAnimation.running } }
当我们点击一次,Rectangle的宽度将会变宽一次,并且颜色也会跟着改变.
25.Qt Quick QML-Animation、PropertyAnimation、NumberAnimation、ColorAnimation
原文:https://www.cnblogs.com/lifexy/p/14851773.html