Android片段反向动画不起作用

时间:2014-08-13 17:35:46

标签: android animation android-fragments

我正在开发包含Master-Detail Flow Template的应用程序的平板电脑部分。单击详细信息侧的按钮时,会在该侧发生片段转换动画,其中一个片段替换另一个片段:

MenuFragment fragment = new MenuFragment();
FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.abc_push_left_in, R.anim.abc_push_left_out,
     R.anim.abc_push_right_out, R.anim.abc_push_right_in);

transaction.replace(R.id.main_fragment_container, fragment);
transaction.addToBackStack(null);
transaction.commit();

过渡中的动画完美无缺。但是,当我想通过单击后退按钮返回到上一个片段时,进入的片段会出现推送动画,但是离开的片段没有执行其退出的推送动画。它只是在一个动画工作时消失了。

我尝试过使用不同的动画但我得到的结果相同。有没有人知道发生了什么,或者我是否对片段转换有所了解?

编辑:我的activity_skill_twopane.xml的详细信息FrameLayout是片段容器,其id为R.id.main_fragment_container。看来,当我在一个xml的细节FrameLayout中放置一个ImageView时,它会在动画发生的同时显示在背景中。有谁知道为什么会发生这种情况?

编辑:我的动画片xml如下:

abc_push_left_in:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%" android:toXDelta="0" android:duration="500"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
</set>

abc_push_left_out:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%" android:duration="500"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

abc_push_right_in:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%" android:duration="500"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>

abc_push_right_out:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%" android:toXDelta="0" android:duration="500"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
</set>

更新:我设法在手机上重新创建问题。如果你有一个片段活动,其中一个按钮与我的动画进行片段交易,并从第二个活动回来调用&#34; popBackStackImmediate&#34;,你会注意到被替换的片段在没有动画的情况下消失了“替换”片段执行动画。

1 个答案:

答案 0 :(得分:0)

我弄错了,null仅用于名称,所以你已经将它添加到了backstack中。

您应该按照不同的顺序制作动画:

transaction.setCustomAnimations(R.anim.abc_push_left_in, R.anim.abc_push_left_out,
 R.anim.abc_push_right_in, R.anim.abc_push_right_out);

此外,您不需要覆盖onBackPressed系统应该为您处理它。