Su Android 4.4.4, sembra che l'unico modo per interrompere un'animazione in dissolvenza alfa su una vista era chiamare il numero View.animate().cancel()
(ad esempio chiamando ViewPropertyAnimator
) .cancel()
.
Ecco il codice che sto utilizzando per la compatibilità prima e dopo ICS:
public void stopAnimation(View v) {
v.clearAnimation();
if (canCancelAnimation()) {
v.animate().cancel();
}
}
... con il metodo:
/**
* 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;
}
Ecco l'animazione che sto fermando:
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);
fonte
2014-09-29 18:27:04
Grazie, CommonsWare, funziona. – Mix
Ma in effetti ho bisogno di una cosa un po 'più complessa: quando l'animazione si ferma, deve rimanere nella posizione corrente, cioè ho un'immagine scorrevole e su un evento touch deve bloccarsi su questo posto. clearAnimation() non è un caso, perché reimposta lo stato sulla posizione di inizio/fine a seconda di setFillAfter() – Mix
@ user349871: 'setFillAfter()' probabilmente non fa quello che tu pensi che faccia, comunque. Quando si verifica l'evento tattile, deselezionare l'animazione e quindi regolare il layout in modo da influire su qualsiasi modifica permanente che si cerca. – CommonsWare