259 votes

Comment faire pour arrêter l’animation (cancel() ne fonctionne pas)

J’ai besoin d’arrêter l’exécution traduire animation événement tactile. Lorsque j’utilise la méthode .cancel() de l’Animation, il ne touche, donc animation va jusqu'à la fin de toute façon.

Y at-il des conseils sur la façon d’annuler l’animation en cours d’exécution ?

533voto

CommonsWare Points 402670

Appelez sur celui qui vous avez appelé `` .

44voto

Sean Barbeau Points 2947

Sur Android 4.4.4, il semble que la seule façon que je pouvais arrêter un alpha de la décoloration de l'animation sur une Vue appelait View.animate().cancel() (c'est à dire, en appelant .cancel() sur le point de Vue de l' ViewPropertyAnimator.

Voici le code que j'utilise pour la compatibilité avant et après ICS:

public void stopAnimation(View v) {
    v.clearAnimation();
    if (canCancelAnimation()) {
        v.animate().cancel();
    }
}

... de la méthode:

/**
 * Returns true if the API level supports canceling existing animations via the
 * ViewPropertyAnimator, and false if it does not
 * @return true if the API level supports canceling existing animations via the
 * ViewPropertyAnimator, and false if it does not
 */
public static boolean canCancelAnimation() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}

Voici l'animation que je suis à l'arrêt:

v.setAlpha(0f);
v.setVisibility(View.VISIBLE);
// Animate the content view to 100% opacity, and clear any animation listener set on the view.
v.animate()
    .alpha(1f)
    .setDuration(animationDuration)
    .setListener(null);

4voto

Akos Cz Points 3880

Ce que vous pouvez essayer de faire est d'obtenir la Matrice de transformation de l'animation avant de l'arrêter et inspecter le contenu de la Matrice pour obtenir les valeurs de position que vous recherchez.

Voici les api, vous devriez regarder dans

public boolean getTransformation (long currentTime, Transformation outTransformation)

public Matrix getMatrix ()

public void getValues (float[] values)

Ainsi, par exemple (certains pseudo-code. Je n'ai pas testé):

Transformation outTransformation = new Transformation();
myAnimation.getTransformation(currentTime, outTransformation);
Matrix transformationMatrix = outTransformation.getMatrix();
float[] matrixValues = new float[9];
transformationMatrix.getValues(matrixValues);
float transX = matrixValues[Matrix.MTRANS_X];
float transY = matrixValues[Matrix.MTRANS_Y];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X