web-dev-qa-db-ja.com

BackStackでフラグメントアニメーションを反転する方法は?

私は、次のコードを使用してフラグメントを使用しているときに戻るボタンが押されると、システムがバックスタックのアニメーションを反転すると思った。

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();
110
user742030

カスタムアニメーションのAndroidドキュメント によると:

変化する:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);

に:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );

そして今、バックスタックがアニメーションします-逆に!!

254
user742030

次を使用した正しいアニメーションを使用し、その動作を魅力のように

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="@Android:integer/config_mediumAnimTime" >
    <objectAnimator
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:propertyName="x"
        Android:valueFrom="1000"
        Android:valueTo="0"
        Android:valueType="floatType" />
</set>

slide_in_right.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="@Android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:propertyName="x"
        Android:valueFrom="0"
        Android:valueTo="1000"
        Android:valueType="floatType" />

</set>

slide_out_left.xml

   <set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="@Android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:propertyName="x"
        Android:valueFrom="0"
        Android:valueTo="-1000"
        Android:valueType="floatType" />

</set>

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="@Android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:propertyName="x"
        Android:valueFrom="-1000"
        Android:valueTo="0"
        Android:valueType="floatType" />

</set>

次に、フラグメントを追加しながら以下を使用します

setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                                R.anim.slide_out_right, R.anim.slide_in_right)

そしてそれは100%働きました

22
Aniket

私の場合

ft.setCustomAnimations(Android.R.anim.slide_in_left, Android.R.anim.slide_out_right, 
                       R.anim.slide_in_right, R.anim.slide_out_left);

完璧なアニメーションを作成します。

slide_in_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="50%p" Android:toXDelta="0"
               Android:duration="@Android:integer/config_mediumAnimTime"/>
    <alpha Android:fromAlpha="0.0" Android:toAlpha="1.0"
           Android:duration="@Android:integer/config_mediumAnimTime" />
</set>

slide_out_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="0" Android:toXDelta="-50%p"
               Android:duration="@Android:integer/config_mediumAnimTime"/>
    <alpha Android:fromAlpha="1.0" Android:toAlpha="0.0"
           Android:duration="@Android:integer/config_mediumAnimTime" />
</set>
9
.setCustomAnimations(R.animator.fragment_fade_in,
        R.animator.fragment_fade_out,
        R.animator.fragment_fade_p_in,
        R.animator.fragment_fade_p_out)

上記を次のものに置き換えます。

mFragmentManager.beginTransaction()
    .setCustomAnimations(R.animator.fragment_fade_in,
            R.animator.fragment_fade_out,
            R.animator.fragment_fade_p_in,
            R.animator.fragment_fade_p_out)
    .replace(R.id.main_container, FragmentPlayerInfo.getInstance(data))
    .addToBackStack(FragmentPlayerInfo.TAG)
    .commit();
3
TarikW