Ответ 1
Отъезд http://developer.android.com/reference/android/provider/Settings.System.html.
Вы можете прочитать флаги:
- TRANSITION_ANIMATION_SCALE
- WINDOW_ANIMATION_SCALE
Если они равны 0, анимация отключена.
Я знаю, я могу запустить настройку-Activity с помощью
Intent intent = new Intent(Settings.ACTION_DISPLAY_SETTINGS);
startActivityForResult(intent,1);
Но как узнать, включены ли анимации в первую очередь?
У меня есть анимация внутри пользовательского представления и хочу только показать ее, если анимация включена в настройках. Если они отключены, я хотел бы попросить пользователя включить их при первом запуске приложения.
Отъезд http://developer.android.com/reference/android/provider/Settings.System.html.
Вы можете прочитать флаги:
Если они равны 0, анимация отключена.
Система.TRANSITION_ANIMATION_SCALE и настройки. Система.ANIMATOR_DURATION_SCALE устарели от API 17.
Поэтому я использую этот метод, чтобы узнать.
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);
}
Или вы можете проверить только 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);
}
}
и установите значение valueAnimator.setDuration() соответственно.
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) {
}
});
Я надеюсь, что это поможет кому-то.