2016-04-15 4 views
0

マシュマロでAnimation scale durationフラグを読み取っているときに問題に直面しています。以前のバージョンのMarshmallow(6.0.0)でも同じコードが動作しています。読む方法マシュマロのアニメーション縮尺期間フラグ

私はフラグメントアニメーションのためにandroid.app.Fragment.setCustomTransition()メソッドを使用しています。 developer option settingsのアニメーションスケールの継続時間が0の場合、フラグメントが表示されません。だから私はこの状態でアニメーションを無効にしなければならなかった。

マイコードスニペット:

public static boolean isAnimationOff() 
    { 
     final float animatorSpeed; 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
     { 
      animatorSpeed = Settings.Global.getFloat(
        context.getContentResolver(), 
        Settings.Global.ANIMATOR_DURATION_SCALE, 
        0); 
     } 
     else 
     { 
      animatorSpeed = Settings.System.getFloat(
        context.getContentResolver(), 
        Settings.System.ANIMATOR_DURATION_SCALE, 
        0); 
     } 
     return animatorSpeed == 0; 
    } 

問題は次のとおりです。このコードは、各上trueを返すには、アニメーションのスケールの期間が0でない場合であっても

は、誰もがこの問題に直面している呼び出しますか?

EDIT1

後、私はフラグメントをロードするisAnimationOff()メソッドを使用するコードスニペットです:

private void loadFragment(Fragment fragment) 
{ 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    if (!Constants.isAnimationOff()) 
     transaction.setCustomAnimations(animSlideIn, animSlideOut); 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.frameTopContainer, fragment) 
      .commitAllowingStateLoss(); 
} 

EDIT2

ここでは、カスタムプロパティを持つカスタムのLinearLayoutは次のとおりです。

public class FractionLinearLayout extends LinearLayout 
{ 

    DisplayMetrics matrics = getContext().getResources().getDisplayMetrics(); 

    public FractionLinearLayout(Context context, AttributeSet attrs, 
           int defStyleAttr) 
    { 
     super(context, attrs, defStyleAttr); 
     // TODO Auto-generated constructor stub 
    } 

    public FractionLinearLayout(Context context) 
    { 
     super(context); 
     // TODO Auto-generated constructor stub 

    } 

    public FractionLinearLayout(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public float getFractionTranslationX() 
    { 

     return getWidth() > 0 ? super.getTranslationX()/getWidth() : Float.MAX_VALUE; 
    } 

    public void setFractionTranslationX(float translationX) 
    { 

     int width = getWidth(); 
     super.setTranslationX(width > 0 ? width * translationX : Float.MAX_VALUE); 
    } 

    public float getFractionTranslationY() 
    { 

     return getHeight() > 0 ? super.getTranslationX()/getHeight() : Float.MAX_VALUE; 
    } 

    public void setFractionTranslationY(float translationY) 
    { 
     int height = getHeight(); 
     super.setTranslationY(height > 0 ? height * translationY : Float.MAX_VALUE); 
    } 

    public float getAnimWidth() 
    { 

     return getLayoutParams().width; 
    } 

    public void setAnimWidth(int animWidth) 
    { 

     getLayoutParams().width = animWidth; 
     requestLayout(); 
    } 
} 
+0

実際に 'isAnimationOff'メソッドが必要ですか? – pskink

+0

アニメーションスケールが0(アニメーションがデベロッパーオプション設定からオフ)かどうかを確認します。 'setCustomTransition()'が呼び出されていない場合は呼び出されません。 – chandil03

+0

@pskink幸運。 – chandil03

答えて

0

私のFractionLinearLayoutクラスに問題がありました。セットsetFractionTranslationX()メソッドでは、getWidth()が最初の呼び出しで0を返していました。これにより、アニメーションがオフのときにフラグメントが表示されないようにするコードが作成されました。今私はgetWidth()の行をgetResources().getDisplayMetrics().widthPixelsに置き換えて、すべて正常に動作しています。

更新されたコード:

public class FractionLinearLayout extends LinearLayout 
{ 

    DisplayMetrics matrics = getContext().getResources().getDisplayMetrics(); 

    public FractionLinearLayout(Context context, AttributeSet attrs, 
           int defStyleAttr) 
    { 
     super(context, attrs, defStyleAttr); 
     // TODO Auto-generated constructor stub 
    } 

    public FractionLinearLayout(Context context) 
    { 
     super(context); 
     // TODO Auto-generated constructor stub 

    } 

    public FractionLinearLayout(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public float getFractionTranslationX() 
    { 

     return getWidth() > 0 ? super.getTranslationX()/getWidth() : 0; 
    } 

    public void setFractionTranslationX(float translationX) 
    { 
     int width = getResources().getDisplayMetrics().widthPixels; 
     super.setTranslationX(width > 0 ? width * translationX : 0); 
    } 

    public float getFractionTranslationY() 
    { 

     return getHeight() > 0 ? super.getTranslationY()/getHeight() : 0; 
    } 

    public void setFractionTranslationY(float translationY) 
    { 
     int height = getResources().getDisplayMetrics().heightPixels; 
     super.setTranslationY(height > 0 ? height * translationY : 0); 
    } 

    public float getAnimWidth() 
    { 

     return getLayoutParams().width; 
    } 

    public void setAnimWidth(int animWidth) 
    { 

     getLayoutParams().width = animWidth; 
     requestLayout(); 
    } 
} 

しかし、それでも、私は、なぜマシュマロで働いていないANIMATOR_DURATION_SCALEフラグがないknowlあるん。

関連する問題