84

我正在使用带有支持包 v4 的 Google API 8 (Android 2.2)。

它不会给出任何错误或动画。

交易:

FragmentTransaction transaction = manager.beginTransaction();       
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();

动画:

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="700"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="700"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

有谁知道这里发生了什么?

4

5 回答 5

263

经理在我设置动画之前堆叠我的事务,所以它在没有动画的情况下堆叠事务(可悲但真实),即使我在setCustomAnimations().

解决方案是先设置动画:

FragmentTransaction transaction = manager.beginTransaction();       
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
于 2012-06-19T19:48:57.110 回答
25

如上所述,单独的语句肯定会起作用。但这里的诀窍setCustomAnimation在设置交易类型之前。add, replace, 等等。否则它不会。因此,应用相同的逻辑method chaining也可以。例如。

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations(R.anim.a_slide_up,
                             R.anim.a_slide_down,
                             R.anim.a_slide_up,
                             R.anim.a_slide_down)
        .add(R.id.root_layout, 
             MyFrag.newInstance())
        .addToBackStack("MyFrag")
        .commit();

把它放在这里,以便喜欢的人method chaining发现它有帮助。干杯!

于 2016-02-12T14:17:47.247 回答
7

把这个留在这里,因为这是最受欢迎的问题。我在片段事务没有动画时遇到了同样的问题。罪魁祸首是在包含布局中将属性android:animateLayoutChanges设置为true

我希望它可以帮助某人节省一些时间来寻找解决方案,因为在不同文件中嵌套布局时可能很难注意到。

于 2017-10-09T15:36:44.713 回答
0

另一个原因可能是fragmentTransaction.show()在提交之前不必要地放置。这使得某些 android API 版本上不显示弹出过渡。

于 2018-10-02T12:53:44.557 回答
0

对我来说,问题是使用Fragment.getChildFragmentManager()我切换到Fragment.getParentFragmentManager()动画突然开始工作。

于 2021-05-02T13:57:46.297 回答