【问题标题】:Control animation time (scrubbing) in QML在 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%,等等。

标签: qt animation qml


【解决方案1】:

正如通过posting on the Qt Forums 发现的那样,解决方案是使用AnimationController 来引用和控制动画,设置progress 属性(在[0,1] 范围内标准化)来控制动画时间。

要从单个 AnimationController 一次控制多个动画,请将动画包装在 ParallelAnimation 中:

AnimationController {
  id: controller
  animation: ParallelAnimation {
    id: anim
    NumberAnimation { ... }
    NumberAnimation { ... }
    SequentialAnimation {
      NumberAnimation { ... }
      NumberAnimation { ... }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2018-11-20
    相关资源
    最近更新 更多