I’m trying to get an QML animation to Start every time it’s clicked, without using States. It Starts the first time it’s clicked, but then won’t Start when it’s clicked a second time.
Is there a reason why? Here’s the code I’m working it.
Image {
id: head;
source: "vlad.png";
height: 80;
width: 90;
MouseArea {
anchors.fill: parent
onClicked: animateHead.start();
ParallelAnimation {
id: animateHead;
NumberAnimation {
property int randomValueX: 0;
function randomize(randomValueX) {
randomValueX = (Math.floor(Math.random()*210));
return randomValueX;
}
target: head;
properties: "x";
to: randomize(randomValueX);
duration: 1000;
easing {
type: Easing.OutBack;
overshoot: 5
}
}
NumberAnimation {
property int randomValueY: 0;
function randomize(randomValueY) {
randomValueY = (Math.floor(Math.random()*210));
return randomValueY;
}
target: head;
properties: "y";
to: randomize(randomValueY);
duration: 700;
easing {
type: Easing.OutBack;
overshoot: 5
}
}
}
}
}
The problem is that the values of the
toproperties of the twoNumberAnimationinstances are bound only once during initialization of the QML component. They are not recalculated when you callanimateHead.start()and animations are only executed if the value of thetoproperty differs from the actual value of the animated property. That’s why it works only the first time.A working solution would be:
Here the values of the
toproperties are set explicitly in theonClickedhandler of theMouseArea.