2011-09-23 7 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に設定され、もう1つは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) { 

    } 
}); 

私はそれが誰かを助けてくれることを願っています。

関連する問題