QML图像、状态和动画--缩放、旋转和平移

Item的缩放和旋转属性

1、缩放:

scale:值小于1,将项目缩小显示;大于1,项目放大显示;负值,镜像效果
import QtQuick 2.4

Rectangle {
    color: "blue"
    width: 100; height: 100
    Rectangle {
        color: "green"
        width: 25; height: 25
    }
    Rectangle {
        color: "red"
        x: 25; y:25; width: 25; height:25
        scale: 1.6  //放大1.6倍显示
    }
}

缩放是以transformOrigin属性指定的点为原点进行的,可以用的点一共9个,默认的原点是Center,即项目的中心。

设置原点:transfomOrigin: "TopLeft"

2、旋转

旋转度数:rotation, 默认值为0

import QtQuick 2.4

Rectangle {
    color: "blue"
    width: 100; height: 100
    Rectangle {
        color: "green"
        width: 25; height: 25
    }
    Rectangle {
        color: "red"
        x: 25; y:25; width: 25; height:25
        scale: 1.6  //放大1.6倍显示
        rotation: 30    //选择30度
    }
}
Item还有一个transform属性,需要指定一个Transform元素列表

Transform元素是一个基本类型,无法直接实例化,可用的Transform类型有3个:

Rotation:旋转

Scale:缩放

Translate:平移

这些元素可以通过专门的属性来进行更高级的变换设置

Rotation提供了坐标轴和原点属性,坐标轴有axis.x、axis.y、axis.z分别代表X轴、Y轴和Z轴,可以实现3D效果

原点由origin.x和origin.y来指定。简单的2D旋转是不需要指定坐标轴的,默认使用Z轴(axis(x: 0; y: 0; z: 0))即可

对于典型的3D旋转,既需要指定原点,也需要指定坐标轴。

angle属性:可以指定顺时针旋转的度数

import QtQuick 2.4

Rectangle {
    color: "blue"
    width: 100; height: 100
    Rectangle {
        color: "green"
        width: 25; height: 25
    }
    Rectangle {
        color: "red"
        x: 25; y:25; width: 25; height:25
        scale: 1.6  //放大1.6倍显示
        transform: Rotation {origin.x: 30; origin.y: 30
            axis{x: 0; y: 1; z: 0}
            angle: 72
        }
    }
}
Scale中提供了origin.x和origin.y属性来设置原点,另外还可以使用XScale和月Scale来分别设置X轴和Y轴的比例因子,就是在X轴方向和Y轴方向的缩放值

transform: Scale {origin.x: 25; origin.y: 25; xScale:3}

Translate中提供了x和y属性来分别设置在X轴和Y轴方向的偏移量

transform: Translate{ y: -20 }



  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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缓动函数,使它看起来更加平滑。你可以根据需要对这些参数进行调整,以达到更好的效果。 总体来说,百叶窗特效是一种简单而又实用的进场动画,可以轻松地让你的应用程序变得更加生动有趣。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值