QML系列教程(5)-属性动画的3种写法

11 篇文章 0 订阅
9 篇文章 5 订阅

属性值动画PropertyAnimation,一个最经典的例子是数值动画 NumberAnimation,

方法1:

语法:

NumberAnimation on [属性名]  {
    动画属性1: 值1
    动画属性2: 值2
。。。。
}   
 

例子:

NumberAnimation on rotation {
                id: minutePinAni; 
                from: 0; to: 360; 
                duration: 20000; loops: Animation.Infinite 
            }

要给哪个元素设置动画,就要把NumberAnimation写在哪个元素里面。也即,这种写法,只能作用于父元素的某个属性。

这种写法,在QML文件加载完成后,会立即自动播放。

 

方法2:

语法:

NumberAnimation  {
    id: 该动画的id
    target: 要施加动画的元素id
    property: "要施加动画的属性名"
    动画属性4: 值4
    动画属性5: 值5
。。。。
}

例子:
 

        NumberAnimation{
            id: minutePinAni
            target: minPin    //动画要作用于id=minPin的那个元素
            property: "rotation" //动画作用于rotation属性
            to: 360;
            duration: 10000;
            loops: Animation.Infinite
        }

这种写法,可以把 NumberAnimation 代码段写到任意位置,不必写在父元素里面。不过,这种动画必须显式地调用start()函数才能开始执行。
例如在一个按钮的槽中,执行: minutePinAni.start()

 

方法3:

语法:
Behavior on 属性名 {
    NumberAnimation {动画参数}
    //RotationAnimation {动画参数}
。。。。或者,任意其他类型的动画
}
例子:
Behavior on rotation {
    NumberAnimation {from: 0; to: 100; duration: 20000; loops: Animation.Infinite}
}

Behavior on rotation {
    NumberAnimation {duration: 20000}  //更常用
}

这种语法也是只能作用于父控件的某个属性。动画的启动时机是:当指定的属性值发生变化时。
例如,在某个按钮槽里修改了这个属性的值,那么动画会按照所设置的duration时间,把这个属性均匀地过渡到所设定的值。

例如,每点一下按钮,就旋转30度,示例代码:

import QtQuick 2.7

Item {
    id: root
    width: 200;
    Image{ //表盘
        ...//绘制表盘,见前面博文
        ...//绘制时针,见前面博文

        Image{ //分针
            id: minPin
            ...//绘制分针,见前面博文

            Behavior on rotation { //设置行为动画
                NumberAnimation {duration: 500}
            }
        }

        MyButton
        {
            id: myBtn
            text: "加30"
            anchors.top: dial.bottom
            anchors.left: parent.left
            onClicked: minPin.rotation += 30; //点一次按钮,角度+30
        }
    }
}


 

 

 

写在最后,上面的例子中,我们使用了 NumberAnimation 来实现一个图片的旋转动画, 有朋友会注意到,QML其实提供了专用的旋转动画类:RotationAnimation。其实这两个类都继承自PropertyAnimation, 功能是非常类似的。

旋转动画RotationAnimation,比NumberAnimation多了一个 旋转方向 的属性 :direction, 这个属性名字叫旋转方向,其实本质上代表了让属性值增大还是减小。

例如,某个属性的当前值为100,目标值为200,

  • 如果使用NumberAnimation,那么这个值会100、101、102、103.....200。
  • 如果使用RotationAnimation, 并设置direction为顺时针,那么其表现与NumberAnimation完全一致;如果设置为逆时针,那么该属性值会100、99、98、97.....0(360)、359、358.....200

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QML中可以通过使用动画来实现各特效,包括进场动画。其中,百叶窗特效是一常见的进场动画,可以让界面元素以一定的节奏和方式出现。下面是一个简单的实现示例: ```qml import QtQuick 2.0 Rectangle { width: 300 height: 300 color: "white" Repeater { model: 5 Image { id: image source: "image.png" width: parent.width / 5 height: parent.height x: index * width clip: true transform: Scale { id: scale origin.x: width / 2 origin.y: height / 2 xScale: 1 yScale: 0 } Behavior on transform { PropertyAnimation { duration: 500 easing.type: Easing.InOutQuad } } } } Component.onCompleted: { for (var i = 0; i < repeater.count; i++) { var image = repeater.itemAt(i); image.scale.y = 1; } } } ``` 在这个示例中,我们使用了一个Repeater来创建了5个相同的Image元素,每个元素的宽度都是父元素宽度的1/5。我们将这些元素放置在一起,然后通过使用clip属性来将它们裁剪成相同大小。接着,我们为每个元素添加了一个缩放变换,初始时y轴的比例为0,这样它们就会“收缩”起来。最后,在组件完成时,我们将每个元素的缩放比例y设置为1,这样它们就会“展开”出现。 在这个示例中,我们使用了PropertyAnimation来控制变换的动画效果。该动画持续500ms,并且使用了Easing.InOutQuad缓动函数,使它看起来更加平滑。你可以根据需要对这些参数进行调整,以达到更好的效果。 总体来说,百叶窗特效是一简单而又实用的进场动画,可以轻松地让你的应用程序变得更加生动有趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值