我知道,我可以開始設置 - 活動與我如何找出如果窗口動畫在設置中啓用
Intent intent = new Intent(Settings.ACTION_DISPLAY_SETTINGS);
startActivityForResult(intent,1);
但是我怎麼知道,如果動畫首先啓用?
我有一個自定義視圖內的動畫,只想顯示它,如果在設置中啓用動畫。如果他們被禁用,我想要求用戶在第一次啓動應用程序時啓用它們。
我知道,我可以開始設置 - 活動與我如何找出如果窗口動畫在設置中啓用
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) {
}
});
我希望它能幫助別人。
謝謝,這工作。想補充一點,如果用戶設置設置爲「顯示某些窗口動畫」,那麼只有Settings.System.WINDOW_ANIMATION_SCALE設置爲1.0,另一個設置爲0.0。 – roplacebo
我們如何實際使用這些我用'getInt()'函數嘗試過的,但仍然看到一個異常,因此切換到具有默認值的'getInt()',但總是得到默認值:( –
)如果嘗試'getFloat',它會工作嗎? –