当前位置:   article > 正文

QML动画(基本动画)_qml鼠标点击动画

qml鼠标点击动画

Animation (动画)

是所有 QML 动画的基础,但动画类型不能直接在 QML 文件中使用。它的存在是为了提供一组通用属性和方法,这些属性和方法可用于从它继承的所有其他动画类型。尝试直接使用动画类型将导致错误。

继承人有以下几种:

AnchorAnimation锚点动画
Animator动画器

ParallelAnimation

并行动画
PathAnimation父动画
PauseAnimation路径动画
PropertyAction暂停动画
PropertyAnimation属性动画
ScriptAction脚本操作
SequentialAnimation顺序动画

属性:

alwaysRunToEnd是否运行到结束
loops循环次数(Animation.Infinite无限循环)
paused是否暂停
running是否运行

信号:

finished()完成时发射信号
started()启动时发射信号
stooped()停止时发射信号

函数:

complete()停止动画,跳转到最终属性值
pause()暂停
restart()重新启动

resume()

恢复
start()启动
stop()暂停

QML提供了多种的方式来定义一个动画:

  • 使用属性值源来创建一个动画,即立刻为一个指定的属性使用动画
  • 使用行为动画,当属性值改变时触发
  • 在一个信号处理器中创建,当接收到一个信号时触发
  • 作为一个独立动画,可以在脚本中进行开始/停止,也可以绑定到不同的对象
  • 使用切换,在不同状态间提供动画

 PropertyAnimation(属性动画)

属性:

duration持续时间(默认250毫秒)
fron起点
to终点

target

targets

目标

多个目标

property

properties:

属性

多个属性

exclude:list<object>保存不受动画影响的项

easing group(缓动组)

easing.amplitude:real缓和整幅
easing.bezierCurve:list<real>缓和,贝塞尔曲线
easing.overshoot :real缓和过充
easing.period:real缓和期

easing.type:enumeration(还有很多种请看官方文档)

Easing.Linear速度恒定
Easing.InQuad(t^2) 函数的缓动曲线:从零速度加速。
Easing.OutQuad(t^2) 函数的缓动曲线:减速到零速度。
Easing.InOutQuad(t^2)加速到一半,然后减速。
Easing.OutInQuad(t^2)减速到一半,然后加速。

运动方向的设置: 

使用on 来指定属性

  • PropertyAnimation on x   沿着x轴运动
  • PropertyAnimation on y   沿着y轴运动

设置属性:

  • property:"x"        沿着x轴运动
  • property:"y"         沿着x轴运动
  • properties:"x,y"   沿着x轴和y轴运动

使用的方法:

  1. 直接在信号处理器中直接创建和使用
  2. 控件中创建,在信号处理器中使用(需要手动调用running函数启动)
  3. 使用Behacior,来分别创建x和y的行为(实现鼠标点击,控件移动到鼠标位置)

直接在信号处理器中直接创建和使用

  1. //鼠标点击控件,移动到指定位置(沿着y轴运动)
  2. Rectangle{
  3. id:rect1;width: 100;height: 100
  4. color:"red";radius: 10
  5. MouseArea{
  6. anchors.fill:parent
  7. onPressed: PropertyAnimation{
  8. target: rect1 //设置使用对象
  9. properties: "y"//沿着y轴
  10. from:0 //起点
  11. to:200 //终点
  12. duration: 2000//运动时间2
  13. easing.type: Easing.InOutBack//移动方式为运动到半程增加过冲,然后减少
  14. }
  15. }
  16. }
  17. //鼠标点击控件,移动到指定位置(沿着x和y轴运动)
  18. Rectangle{
  19. id:rect1;width: 100;height: 100
  20. color:"red";radius: 10
  21. MouseArea{
  22. anchors.fill:parent
  23. onPressed: PropertyAnimation{
  24. target: rect1
  25. properties: "x,y"//沿着x和y轴
  26. from:0 //起点
  27. to:200 //终点
  28. duration: 2000//运动时间2
  29. easing.type: Easing.InOutBack
  30. }
  31. }
  32. }

 控件中创建,在信号处理器中使用

  1. Rectangle{
  2. id:rect1;width: 100;height: 100
  3. color:"red";radius: 10
  4. PropertyAnimation{
  5. id:pa1
  6. target: rect1
  7. properties: "x,y"//沿着x和y轴
  8. from:0 //起点
  9. to:200 //终点
  10. duration: 2000//运动时间2
  11. easing.type: Easing.InOutBack
  12. }
  13. MouseArea{
  14. anchors.fill:parent
  15. onPressed: {
  16. pa1.running=true//开启动画
  17. }
  18. }
  19. }

行为动画:

经常在一个特定的属性值改变时要应用一个动画,这样可以使用Behavior为属性改变指定一个默认的动画。

  1. Rectangle{
  2. id:rect1;width: 100;height: 100
  3. color:"red";radius: 10
  4. Behavior on x{ //x变化时,使用该行为
  5. PropertyAnimation{
  6. duration: 500
  7. easing.type:Easing.InQuart
  8. }
  9. }
  10. Behavior on y{ //y变化时,使用该行为
  11. PropertyAnimation{
  12. duration: 500
  13. easing.type:Easing.InQuint
  14. }
  15. }
  16. }
  17. MouseArea{
  18. anchors.fill:parent
  19. onPressed: {
  20. rect1.x=mouse.x
  21. rect1.y=mouse.y
  22. }
  23. }

切换:

使用states:State,当状态改变时,进行切换。

  1. Rectangle{
  2. id:rect1
  3. width:100;height: 100;color: "red"
  4. MouseArea{
  5. anchors.fill: parent
  6. onClicked: rect1.state="moved"
  7. }
  8. states: State{ //添加状态
  9. name:"moved"
  10. PropertyChanges{
  11. target: rect1
  12. x:50;y:50
  13. }
  14. }
  15. transitions: Transition { //添加过渡
  16. PropertyAnimation{
  17. properties: "x,y"
  18. duration: 1000
  19. }
  20. }
  21. }

 属性动画元素:

以下都是继承自PropertyAnimation

  • NumberAnimation  为实数和整数等数值类属性提供了高效的实现
  • ColorAnimation   为颜色提供支持
  • RotationAnimation 为旋转动画提供支持
  • Vector3dAnimation 为矢量3D提供支持

 NumberAnimation的使用:

数字动画是一种专门的属性动画,它定义在数值更改时要应用的动画。

如果 NumberAnimation 所跟踪的数字值发生不规则更改,则可能无法平滑地进行动画处理。如果是这种情况,请改用SmoothedAnimation处理。

  1. Rectangle{
  2. width: 100;height: 100
  3. color: "lightBlue"
  4. NumberAnimation on x{
  5. to:50
  6. duration: 1000
  7. }
  8. }

ColorAnimation   为颜色提供支持

ColorAnimation 是一种专用的属性动画,它定义在颜色值更改时要应用的动画

ColorAnimation 可以通过多种方式应用,包括过渡、行为和属性值源

  1. Rectangle{
  2. id:rect
  3. width: 100;height: 100
  4. color: "lightBlue"
  5. ColorAnimation on color{ //颜色从蓝色变为红色
  6. from: "blue"
  7. to:"red"
  8. duration: 1000
  9. }
  10. }

RotationAnimation 为旋转动画提供支持

旋转动画是一种专门的属性动画,用于控制动画期间的旋转方向,默认情况下,它沿数值变化的方向旋转;从 0 到 240 的旋转将顺时针旋转 240 度,而从 240 到 0 的旋转将逆时针旋转 240 度。可以设置方向属性以指定旋转发生的方向

属性: 

direction方向
from开始的度数
to结束的度数

direction:enumeration 

RotationAnimation.Numerical (default)通过在两个数字之间进行线性插值来旋转。从 10 到 350 的旋转将顺时针旋转 340 度。
RotationAnimation.Clockwise在两个值之间顺时针旋转
RotationAnimation.Counterclockwise 在两个值之间逆时针旋转
RotationAnimation.Shortest

最短 - 沿生成最短动画路径的方向旋转。从 10 到 350 的旋转将逆时针旋转 20 度。

  1. Rectangle{
  2. id:rect1
  3. height: 200;width: 200
  4. x:200;y:200;color: "red"
  5. RotationAnimation on rotation{
  6. to:200
  7. direction: RotationAnimation.Counterclockwise//逆时针旋转
  8. duration: 2000
  9. }
  10. }

参考文档:

Animation and Transitions in Qt Quick | Qt Quick 5.15.12

Qt Quick Examples - Animation | Qt Quick 5.15.12 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/843923
推荐阅读
相关标签
  

闽ICP备14008679号