【问题标题】:Animating fragments and the back stack动画片段和返回堆栈
【发布时间】:2011-07-16 16:55:51
【问题描述】:

我在使用或理解如何弹出时遇到问题 后台堆栈的 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

【问题讨论】:

  • 我也遇到了这个问题,在这里提交了错误报告code.google.com/p/android/issues/…
  • 请给上面的错误报告加星标。
  • 已加星标。感谢您将其提交为布格。在这样做之前,我想再尝试一下。
  • ... 并且该错误已得到修复。 3.1 版本的修复来得太晚了;它将在即将发布的版本中。
  • @Chet:能否请您发布修复的详细信息作为答案,以便我们可以将其从未答复列表中删除?谢谢。

标签: android animation transactions transitions android-fragments


【解决方案1】:

我用这个:

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

当按下后退按钮时,转换会反向工作。

【讨论】:

  • 先生,您是人间的神。
  • 这是一个简单的解决方案
【解决方案2】:

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

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

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

【讨论】:

  • 兼容性库 (r4) 的最新版本现已修复此问题。
  • 我正在使用最新版本的兼容性库,但每当我尝试调用它时,都会收到“未知动画名称:objectAnimator”异常。
  • 有了支持,你只能在 xml 中使用动画,旧的方式,而不是 object animator。
【解决方案3】:

这是一个错误,请查看bug report 15623。一位 Android 项目成员评论说,该修复对于 3.1 版来说为时已晚,但它应该会在下一个版本中使用。

同一位成员继续说...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多