En Android 4.4.4, parece que la única forma en que podía detener una animación de desvanecimiento alfa en una Vista era llamar al View.animate().cancel()
(es decir, llamar al .cancel()
en la Vista ViewPropertyAnimator
).
Aquí está el código que estoy usando para la compatibilidad antes y después de ICS:
public void stopAnimation(View v) {
v.clearAnimation();
if (canCancelAnimation()) {
v.animate().cancel();
}
}
... con el método:
/**
* 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;
}
Aquí está la animación que estoy parando:
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);
Gracias, CommonsWare, funciona. – Mix
Pero, de hecho, necesito algo un poco más complejo: cuando la animación se detiene, debe permanecer en su posición actual, es decir, tengo una imagen deslizante y en evento táctil debe congelarse en este lugar. clearAnimation() no es un caso, porque restablece el estado a la posición de inicio/final dependiendo de setFillAfter() – Mix
@ user349871: 'setFillAfter()' probablemente no haga lo que usted cree que ocurre. Cuando se produce el evento táctil, borre la animación y luego ajuste su diseño para afectar cualquier cambio permanente que busque. – CommonsWare