Configuración. Sistema .TRANSITION_ANIMATION_SCALE y Configuración. Sistema .ANIMATOR_DURATION_SCALE están en desuso desde API 17.
Así que utilizo este método para averiguarlo.
private boolean areSystemAnimationsEnabled() {
float duration, transition;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
duration = Settings.Global.getFloat(
context.getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE, 1);
transition = Settings.Global.getFloat(
context.getContentResolver(),
Settings.Global.TRANSITION_ANIMATION_SCALE, 1);
} else {
duration = Settings.System.getFloat(
context.getContentResolver(),
Settings.System.ANIMATOR_DURATION_SCALE, 1);
transition = Settings.System.getFloat(
context.getContentResolver(),
Settings.System.TRANSITION_ANIMATION_SCALE, 1);
}
return (duration != 0 && transition != 0);
}
O bien, se puede comprobar sólo para ANIMATOR_DURATION_SCALE ...
private float checkSystemAnimationsDuration() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.Global.getFloat(
context.getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE,
0);
} else {
return Settings.System.getFloat(
context.getContentResolver(),
Settings.System.ANIMATOR_DURATION_SCALE,
0);
}
}
y establecer su valueAnimator.setDuration() en consecuencia.
ValueAnimator alphaFirstItemAnimator = new ValueAnimator();
alphaFirstItemAnimator.setObjectValues(0.8F, 0F);
alphaFirstItemAnimator.setDuration((long)(DURATION_ANIMATION_MILLIS * checkSystemAnimationsDuration()));
alphaFirstItemAnimator.setInterpolator(new DecelerateInterpolator());
alphaFirstItemAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
}
});
Espero que ayude a alguien.
Gracias, eso funcionó. Me gustaría añadir, que si la configuración del usuario está configurada en "Se muestran algunas animaciones de ventana", entonces solo Settings.System.WINDOW_ANIMATION_SCALE se establece en 1.0, el otro en 0.0. – roplacebo
¿Cómo los usamos realmente? Probé con la función 'getInt()' pero seguí viendo una excepción y cambié al 'getInt()' con un valor predeterminado pero luego siempre obtengo el valor predeterminado de nuevo :( –
Si lo intentas 'getFloat', ¿funcionará? –