Ich muss eine laufende Übersetzungsanimation stoppen. Die .cancel()
Methode von Animation
hat keine Wirkung; Die Animation läuft sowieso bis zum Ende.
Wie brechen Sie eine laufende Animation ab?
Rufen Sie clearAnimation()
an, was auch immer View
Sie angerufen haben startAnimation()
.
setFillAfter()
wahrscheinlich sowieso nicht das, was du denkst. Wenn das Berührungsereignis auftritt, löschen Sie die Animation und passen Sie dann Ihr Layout an, um die von Ihnen gewünschten dauerhaften Änderungen zu beeinflussen.Unter Android 4.4.4 war es anscheinend die einzige Möglichkeit, eine Alpha-Fading-Animation in einer Ansicht zu stoppen, das Aufrufen
View.animate().cancel()
(dh das Aufrufen.cancel()
der AnsichtViewPropertyAnimator
).Hier ist der Code, den ich aus Kompatibilitätsgründen vor und nach ICS verwende:
... mit der Methode:
Hier ist die Animation, die ich stoppe:
quelle
.setListener(null);
das hat mir geholfen.Wenn Sie den Animations-Listener verwenden, stellen Sie ein
v.setAnimationListener(null)
. Verwenden Sie den folgenden Code mit allen Optionen.quelle
v.setAnimation(null);
da dies in erfolgtv.clearAnimation();
.Sie müssen .clearAnimation () verwenden. Methode im UI-Thread:
quelle
Sie können versuchen, die Transformationsmatrix aus der Animation abzurufen, bevor Sie sie stoppen, und den Matrixinhalt überprüfen, um die gewünschten Positionswerte zu erhalten.
Hier sind die APIs, in die du schauen solltest
public boolean getTransformation (long currentTime, Transformation outTransformation)
public Matrix getMatrix ()
public void getValues (float[] values)
Also zum Beispiel (ein Pseudocode. Ich habe dies nicht getestet):
quelle
Verwenden Sie die Methode setAnimation (null) , um eine Animation zu stoppen. Sie wird in View.java als öffentliche Methode verfügbar gemacht . Sie ist die Basisklasse für alle Widgets , mit denen interaktive UI-Komponenten (Schaltflächen, Textfelder usw.) erstellt werden.
/** * Sets the next animation to play for this view. * If you want the animation to play immediately, use * {@link #startAnimation(android.view.animation.Animation)} instead. * This method provides allows fine-grained * control over the start time and invalidation, but you * must make sure that 1) the animation has a start time set, and * 2) the view's parent (which controls animations on its children) * will be invalidated when the animation is supposed to * start. * * @param animation The next animation, or null. */ public void setAnimation(Animation animation)
quelle
Um die Animation zu stoppen, können Sie einen solchen objectAnimator festlegen, der nichts tut, z
Beim manuellen Umdrehen erfolgt zunächst eine Animation von links nach rechts:
Wenn Sie dann auf Auto Flipping umschalten, erfolgt keine Animation
quelle