动画片段和后台堆栈

Kel*_*ell 54 animation android 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(); 
} 
Run Code Online (Sandbox Code Playgroud)

一切都很好地向前发展,但当用户点击后退按钮时,过渡动画不会反转.我所期待的是当片段被删除时,它将使用淡出动画.相反它似乎弹出(没有动画),然后容器似乎淡入.我不确定这是发生了什么,但片段绝对不会淡出.

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

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

小智 49

我用这个:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);
Run Code Online (Sandbox Code Playgroud)

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

  • 先生,你是男人中的上帝. (10认同)

kaj*_*ham 29

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

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

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


Gal*_*lal 5

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

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

问题是在弹出操作上运行相同的动画,就像运行将片段放在当前位置一样.例如,在上面的滑动示例中,在向前操作(将旧片段推入堆栈并将新片段移动到视图中)中,我们将旧片段从中心向左滑动并将新片段从通往市中心.当弹出堆栈时,会运行这些相同的动画:最新的片段通过从右侧滑动到中心来动画"out"(之后它会消失,因为它被删除).旧片段从堆栈中弹出,从中心向左侧动画...在屏幕右侧.