私は、次のコードを使用してフラグメントを使用しているときに戻るボタンが押されると、システムがバックスタックのアニメーションを反転すると思った。
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();
カスタムアニメーションの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 );
そして今、バックスタックがアニメーションします-逆に!!
次を使用した正しいアニメーションを使用し、その動作を魅力のように
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%働きました
私の場合
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>
.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();