我使用的是带有支持包v4的Google API8(Android2.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>
有人知道这里发生了什么吗?
发布于 2012-06-20 03:48:57
在我设置动画之前,管理器正在堆叠我的事务,所以它堆叠了没有动画的事务(可悲,但这是真的),即使我在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();
发布于 2016-02-12 22:17:47
如上所述,单独的语句肯定会起作用。但是在这里,的技巧是在设置事务类型(即add
、replace
等)之前先执行setCustomAnimation
,否则就不会这样做。因此,应用相同的逻辑,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
的人就会发现它很有帮助。干杯!
发布于 2017-10-09 23:36:45
把这个留在这里,因为这是最受欢迎的问题。我也有同样的问题,片段事务不是动画。罪魁祸首是在包含布局中将属性android:animateLayoutChanges
设置为true
。
我希望它能帮助人们节省一些寻找解决方案的时间,因为在不同的文件中嵌套布局可能很难注意到。
https://stackoverflow.com/questions/11041325
复制相似问题