8

我正在尝试用幻灯片动画切换我的片段

使用此代码:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();        
SearchPanelFragment existingFragment = (SearchPanelFragment) manager.findFragmentByTag(SearchPanelFragment.FRAGMENT_NAME);        
transaction.setCustomAnimations(R.xml.slide_down_search_panel, R.xml.slide_up_search_panel);        
if (existingFragment != null) {
    if (existingFragment.isVisible())
        transaction.remove(existingFragment);       
} else {
    transaction.add(R.id.top_panel_fragment, new SearchPanelFragment(this), SearchPanelFragment.FRAGMENT_NAME);
}

    transaction.commit();

到目前为止,我只能在transaction.add何时播放退出动画?我只能在使用时得到它,transaction.replace但后来我只是用相同的新片段交换一个旧片段,我想要的是隐藏/删除/分离/任何必要的东西,让它在播放退出动画时消失

编辑:我尝试隐藏、删除和分离。无论我做什么,动画都不会播放。它仅在添加、显示和替换时播放

编辑2:第二个动画可能有问题。请看一下它们。第一个滑下来,似乎工作得很好。

滑下

<translate
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="-100%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

向上滑动

<translate
    android:duration="700"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="-100%" />
4

2 回答 2

9

您实际上使用了错误的功能。

根据以下文档setCustomAnimations(int enter, int exit)

为在此事务中进入和退出的片段设置要运行的特定动画资源。弹出回栈时不会播放这些动画。

相反,您应该使用setCustomAnimations (int enter, int exit, int popEnter, int popExit)

Set specific animation resources to run for the fragments that are entering and exiting in this transaction. The popEnter and popExit animations will be played for enter/exit operations specifically when popping the back stack.

于 2013-03-29T00:13:00.453 回答
8

编辑

该错误已于 2013 年 6 月 7 日修复。我相信从修订版 18 开始,该错误已得到修复。

如果您使用的是最新的支持库修订版,这不再是问题

旧答案

http://code.google.com/p/android/issues/detail?id=32405支持库中存在错误。让它工作的唯一机会是获取支持库源并自己重新编译

于 2012-12-21T13:18:00.400 回答