ich onClick Methode zugewiesen haben, die w/folgende Struktur mehrere Animationen beginntObjectAnimator Stopp/Abbruch/Neustart Animation auf mehrere Klicks
private static void aniChain (params)
final ObjectAnimator step1 = RotateObj(params);
final ObjectAnimator step2 = AlphaObj(params);
final ObjectAnimator step3 = ScaleXObj(params);
final ObjectAnimator step4 = ScaleYObj(params);
final ObjectAnimator step5 = ScaleXObj(params);
final ObjectAnimator step6 = ScaleYObj(params);
final ObjectAnimator step7 = AlphaObj(params);
step1.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
isAnimate = true; //another control option
step2.start();
step3.start();
step4.start();
}
});
step2.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
step5.start();
step6.start();
}
});
step6.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
step7.start();
}
});
step7.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
v.setImageDrawable(null);
isAnimate = false; // another control option
}
});
if (!step1.isStarted()) {
step1.start();
}
Grundsätzlich dass Kette am 1. Klick funktioniert gut, aber im 2. oder mehr klicken Sie Bugs aus. Frage ist, wie man sie stoppt?
Ich habe eine andere Bedingungen für die 2. Klick versucht, die
if (!step1.isStarted()) { //if opener is not started then start it
step1.start();
}
if (step1.isStarted()) { //and if it was started then cancel every
step1-7.cancel(); //animation as they are and proceed to end of last animation
step7.end();
}
aber es immer noch Fehler aus sind. Die Deaktivierung friert die Animation hier ein, ähnlich wie beim Pausieren, aber ohne Wiederaufnahme. Es ändert nie Zustand zu Anfang oder irgendjemand anderes, also verstehe ich ziemlich Punkt cancel()
nicht. Wie auch immer, nach meiner Logik bei der zweiten Bedingungsprüfung friere ich alle Animationen unabhängig von ihrem Status ein und gehe zum Ende der letzten, um das Bild zu entfernen.
Irgendwie multiple nach mehreren Klicken diese Animationen neigen dazu, miteinander zu Echo, als ob sie voneinander in Methodenaufrufen getrennt sind.
versuchte auch
if (!isAnimate) {
step1.start();
} else if (isAnimate) {
step1-7.cancel();
step7.end();
}
nicht funktioniert.
Gibt es eine andere Möglichkeit, isRunning() zu überprüfen und diese Animationen zu stoppen?
upd
hinzugefügt, um diese
if (!isAnimate) {
step1.start();
Log.i("boolean","sun "+ isAnimate);
} else {
isAnimate = false;
Log.i("boolean","sun "+ isAnimate);
}
while (step1.isStarted() && isAnimate) {
step1-2.cancel();
step7.end();
}
aber in diesem Fall Animation beginnt nie. Hinzufügen von while zu if
s macht es zum letzten Schritt überspringen, sobald boolean auf true ändert, aber nicht, wenn es einen zweiten Klick gibt. Ich schätze, ich brauche eine Art Hörer statt Schleife.
Gibt es irgendeine Art von Listener für laufende Animation? Wie onTick für CountdownTImer? Auf diese Weise kann ich mit öffentlichen Boolean sie stoppen. – JayJayAbrams
oder kann ich eine Schleife innerhalb jedes hinzufügen, um nach IsRunning und boolescher Variable zu suchen? also, während es spielt es immer auf einen Wert prüfen und dann, wenn Änderung erscheint Schalter – JayJayAbrams
Sie dachte richtig, mit Boolean Flag wird Ihnen helfen. Nur eine Korrektur, die isAnimate = true in der ersten Zeile der Methode aniChain() und isAnimate = false in onAnimationEnd() von step7 setzt. –