qml的10种缓动曲线动画效果

目标:点击曲线图片,底部的球会根据缓动曲线进行左右移动。

main.qml

import QtQuick

Window {
    width: 1500
    height: 600
    visible: true
    title: qsTr("缓动曲线动画")

    Rectangle {
        id: root
        anchors.fill: parent
        color: "gray"

        gradient: Gradient {
            GradientStop {position: 0.0; color: root.color}
            GradientStop {position: 1.0; color: Qt.lighter(root.color, 1.5)}
        }

        Grid {
            anchors.fill: parent
            anchors.margins: 20
            spacing: 150
            rows: 2

            EasingType {
                image_name: "InExpo"

                easingType: Easing.Linear
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InOutBack"

                easingType: Easing.InOutBack
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InOutBounce"

                easingType: Easing.InOutBounce
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InOutCirc"

                easingType: Easing.InOutCirc
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InOutCubic"

                easingType: Easing.InOutCubic
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InoutElastic"

                easingType: Easing.InoutElastic
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "InOutExpo"

                easingType: Easing.InOutExpo
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "Linear"

                easingType: Easing.Linear
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "OutExpo"

                easingType: Easing.OutExpo
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }

            EasingType {
                image_name: "SineCurve"

                easingType: Easing.SineCurve
                onClicked: {
                    am.easing.type = easingType
                    box.toggle = !box.toggle
                }
            }
        }

        Image {
            anchors.bottom: parent.bottom
            id: box
            source: "images/精灵球.png"
            scale: 0.7
            property bool toggle
            x: toggle ? width : root.width-width *2
            width: 100; height: 100

            Behavior on x {
                NumberAnimation {
                    id: am
                    duration: 1500
                }
            }
        }

    }
}

EasingType.qml 

import QtQuick

Item {
    id: root
    width: 100
    height: 100

    property alias image_name: label.text //图片名称
    property alias source: image.source //图片路径
    property var easingType
    signal clicked

    Image {
        id: image
        source: "images/" + image_name + ".png"
        width: 200
        height: 100

        Text {
            id: label
            text: qsTr("text")
            anchors.left: parent.left
            anchors.horizontalCenter: parent.horizontalCenter
        }
    }

    MouseArea {
        anchors.fill: parent
        onClicked: root.clicked()
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值