Подтвердить что ты не робот

Как узнать, включены ли анимации окон в настройках

Я знаю, я могу запустить настройку-Activity с помощью

Intent intent = new Intent(Settings.ACTION_DISPLAY_SETTINGS);
startActivityForResult(intent,1);

Но как узнать, включены ли анимации в первую очередь?

У меня есть анимация внутри пользовательского представления и хочу только показать ее, если анимация включена в настройках. Если они отключены, я хотел бы попросить пользователя включить их при первом запуске приложения.

4b9b3361

Ответ 2

Система.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) {

  }
});

Я надеюсь, что это поможет кому-то.