动画片段和后台堆栈

时间:2011-03-16 15:31:34

标签: android animation transactions transitions android-fragments

我无法使用或了解弹出方式 后台堆栈的FragmentTransactions处理自定义 动画。具体来说,我希望它可以调用“out”动画,但是 它似乎没有。

我有一个处理片段事务的简单方法 (FragmentTransaction)我添加片段并应用自定义 过渡使其淡入/淡出。我也加入了这个 后台堆栈,以便用户可以撤消该事务 后退按钮,基本上导航到片段之前的状态 加入。

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

一切都在向前发展,但是当用户点击时 后退按钮,过渡动画不会反转。我的期望 当碎片被移除时,它将使用淡出 动画。相反,它似乎弹出(没有动画)然后 容器似乎淡入。我不确定这究竟是什么 正在发生,但片段绝对不会消失。

我的应用程序使用兼容性库来添加片段支持, 但我认为这也适用于Honeycomb(android-11)。 有谁知道我在这里做错了什么,或者我是不是 只是期待太多?理想情况下,我想动画 片段与Gmail(在Xoom上)的方式类似 通过单击消息继续前进,然后使用后退返回 按钮。优选地,不必覆盖后退按钮 功能,并跟上我自己的片段状态,因为我可以 有几个“交易”,我想退出,我 不是重新发明车轮的粉丝。

Android开发者小组也问过:http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

3 个答案:

答案 0 :(得分:49)

我用这个:

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

,按下后退按钮时,转换工作相反。

答案 1 :(得分:29)

该错误已在3.2版本中修复,并添加了以下新API:

http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

需要注意的是,它还没有被反向移植到兼容性库(如错误报告中所述)。

答案 2 :(得分:5)

这是一个错误,请看bug report 15623。其中一个Android项目成员评论说,修复程序对于3.1版本来说已经太晚了,但它应该会进入下一个版本。

同一位成员继续说......

  

问题是一样的   动画在弹出操作上运行   正如将碎片放入其中一样   他们目前的地方。例如,在   上面的滑动示例,在a   前进操作(推动旧的   片段到堆栈上并移动   新片段进入视图),我们滑动了   老碎片从中心到   左边并滑动新片段   从右到中心。当。。。的时候   弹出堆栈,这些相同的动画   运行:最近的片段是   通过从中滑动来“动画”   中心的权利(之后   它消失了,因为它正在存在   去除)。弹出旧片段   从堆栈中取出并从中激活   左边的中心......右边的   屏幕。