我正在尝试在Activity的片段容器中的片段之间添加简单的幻灯片动画。我的代码在运行Android Oreo的测试设备上运行。
在 MyActivity的 onCreate()
中:
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.fragmentContainer, oldFragment, OldFragment.class.getName())
.commit();
}
按钮的 onClick()
的代码中:
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left,
R.anim.enter_from_left, R.anim.exit_to_right)
.replace(R.id.fragmentContainer, newFragment, NewFragment.class.getName())
.addToBackStack(NewFragment.class.getName())
.commit();
res \ anim \ enter_from_left.xml :
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="@android:integer/config_shortAnimTime" />
res \ anim \ enter_from_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%"
android:toXDelta="0%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="@android:integer/config_shortAnimTime" />
res \ anim \ exit_to_left.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="-100%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="@android:integer/config_shortAnimTime" />
res \ anim \ exit_to_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="100%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="@android:integer/config_shortAnimTime" />
请注意,我的fragment
类扩展了android.support.v4.app.Fragment
,而MyActivity
扩展了android.support.v7.app.AppCompatActivity
。
从OldFragment动画到NewFragment效果很好。 NewFragment从右侧滑入。但是,当我按下“后退”按钮时,没有动画发生-它只是“跳到” OldFragment。
我在哪里弄错了?按下后退按钮时,如何使动画从NewFragment变为OldFragment?
答案 0 :(得分:0)
在替换片段时尝试
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left,R.anim.enter_from_left, R.anim.exit_to_right)
.replace(R.id.fragmentContainer, newFragment, NewFragment.class.getName()).addToBackStack(NewFragment.class.getName()).commit();
在背面按,您必须删除片段或在后台弹出。当您删除片段或在后台弹出时,无需设置动画即可。