2016-10-03 60 views
1

示例代码:QML如何停止过渡动画?

Button{ 
    text: "stop" 
    onClicked: p1p2Aniamtion.stop(); 
} 
Rectangle { 
    id: rect 
    states: [ 
     State { 
      name: "p1" 
      PropertyChanges {target: rect; x: 0; y: 0} 
     }, 
     State { 
      name: "p2" 
      PropertyChanges {target: rect; x: 500; y: 0} 
     } 
    ] 
    transitions: [ 
     Transition { 
      from: "p1"; to: "p2"; reversible: true 
      NumberAnimation{ property: "x"; duration: 5000} 
     } 
    ] 
} 

在这里,我有一个矩形,并使其从点p1移动到另一个点p2, 如果按钮点击,我想的过渡力动画停止。

我试图阻止NumberAnimation,但看起来NumberAnimation绑定Transition,所以无论如何控制动画?

回答

0

如果你想强迫它,移动到终点位置,尝试:

onClicked: { 
     var s = rect.state 
     rect.state = '' 
     rect.state = s 
    } 

如果你想将它恢复到原来的位置尝试:

onClicked: { 
     rect.state = '' 
    } 

如果你想让它留在它的地方尝试:

  • 添加属性eG tempX:x
  • 添加状态e.G.用propertyChange {target:rect; X:tempX}
  • onXChanged:tempX = X

切换到状态 '暂停' onClicked

Button{ 
    y: 400 
    text: "stop" 
    onClicked: { 
     var s = rect.state 
     rect.state = 'pause' 
     //rect.state = s 
    } 
} 

Button{ 
    y: 400 
    x: 100 
    text: "run" 
    onClicked: rect.state = (rect.state === 'p1' ? 'p2' : 'p1'); 
} 

Rectangle { 
    id: rect 
    width: 80 
    height: 80 
    property int tempX: x 
    onXChanged: tempX = x 

    states: [ 
     State { 
      name: "p1" 
      PropertyChanges {target: rect; x: 0; y: 0} 
     }, 
     State { 
      name: "p2" 
      PropertyChanges {target: rect; x: 500; y: 0} 
     }, 
     State { 
      name: 'pause' 
      PropertyChanges { target: rect; x: tempX } 
     } 
    ] 
    transitions: [ 
     Transition { 
      from: "p1"; to: "p2"; reversible: true 
      NumberAnimation{ property: "x"; duration: 5000} 
     } 
    ] 
} 
+0

谢谢!很好的答案。 另一个问题:我添加动画恢复(例如:暂停⇒p1),如果我恢复动画,持续时间需要重新计算。 – Jiu

+0

这应该很容易。你有起点(x:0)终点(x:500)和你当前的位置。所以你计算你到目前为止的移动百分比(pos - start)/(end - start),并用你的持续时间乘以它。 (没有测试,但不知怎的,这应该工作...) – derM