2011-09-23 29 views
13

我知道,我可以開始設置 - 活動與我如何找出如果窗口動畫在設置中啓用

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

但是我怎麼知道,如果動畫首先啓用?

我有一個自定義視圖內的動畫,只想顯示它,如果在設置中啓用動畫。如果他們被禁用,我想要求用戶在第一次啓動應用程序時啓用它們。

回答

9

結賬http://developer.android.com/reference/android/provider/Settings.System.html

可以讀取標誌:

  • TRANSITION_ANIMATION_SCALE
  • WINDOW_ANIMATION_SCALE

如果是0,則動畫被禁用。

+1

謝謝,這工作。想補充一點,如果用戶設置設置爲「顯示某些窗口動畫」,那麼只有Settings.System.WINDOW_ANIMATION_SCALE設置爲1.0,另一個設置爲0.0。 – roplacebo

+0

我們如何實際使用這些我用'getInt()'函數嘗試過的,但仍然看到一個異常,因此切換到具有默認值的'getInt()',但總是得到默認值:( –

+1

)如果嘗試'getFloat',它會工作嗎? –

6

設置。 系統.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) { 

    } 
}); 

我希望它能幫助別人。