在 QML 中控制动画时间(擦洗)
Posted
技术标签:
【中文标题】在 QML 中控制动画时间(擦洗)【英文标题】:Control animation time (scrubbing) in QML 【发布时间】:2016-03-30 23:03:17 【问题描述】:我有一个 Qt 5.6 NumberAnimation
(实际上很多)。我想明确控制它们的评估时间。例如,假设这是一个动画程序,用户创建了动画曲线,现在正沿着时间线来回“擦洗”播放头。每当我获得新的播放头时间时,我都想评估所有动画以生成适合该时间的值。
从 Qt 文档来看,这看起来是不可能的。从Animation
继承的成员允许我对动画进行start()
和pause()
和resume()
,从开头到restart()
或从complete()
到结尾。但是我没有看到允许我控制时间的方法或属性。但是,我(通过示例)发现了许多可能的 QML 功能,但没有明显记录。 NumberAnimation
可以做到这一点吗?
如果NumberAnimation
无法做到这一点,还有其他方法吗?以某种方式来表示动画的任意 2D 路径,然后评估沿该路径在给定 X 坐标处的 Y 交点?
【问题讨论】:
Numberanimation 继承了 PropertyAnimation 的“duration”,你试过了吗? @FrankOsterfeld 谢谢你的建议,但不,我没有尝试过。duration
property 控制动画的总长度(从开始运行到结束需要多长时间)。它不允许我通过动画将时间跳到 95%,然后是 94%,然后是 90%,然后是 25%,然后是 75%,等等。
【参考方案1】:
正如通过posting on the Qt Forums 发现的那样,解决方案是使用AnimationController
来引用和控制动画,设置progress
属性(在[0,1] 范围内标准化)来控制动画时间。
要从单个 AnimationController
一次控制多个动画,请将动画包装在 ParallelAnimation
中:
AnimationController
id: controller
animation: ParallelAnimation
id: anim
NumberAnimation ...
NumberAnimation ...
SequentialAnimation
NumberAnimation ...
NumberAnimation ...
【讨论】:
以上是关于在 QML 中控制动画时间(擦洗)的主要内容,如果未能解决你的问题,请参考以下文章