我只需要简单的幻灯片并滑出动画片段转换,下面是我的代码: slide_in_left.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<translate
android:fromXDelta="-100%"
android:toXDelta="0%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="700">
</translate>
</set>
slide_out_right.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700">
</translate>
</set>
我使用的代码:
SomeFragment frag = SomeFragment.newInstance(foo);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.the_fragment, frag);
ft.addToBackStack(null);
ft.commit();
结果看起来很奇怪,当转换开始时,当前片段消失而没有动画,输入片段(从左侧)像滚动纸一样。我的动画xml代码出了什么问题?
谢谢!
答案 0 :(得分:5)
getSupportFragmentManager()意味着你正在使用Fragments的兼容包。 我有同样的问题,根本就没有动画。
答案 1 :(得分:3)
Google更新了兼容性库,并修复了转换。你们应该从android sdk / avd manager更新你的兼容性库。
答案 2 :(得分:2)
我找到了关于片段兼容性库动画问题的一篇很酷的帖子here,我采取了第二种方法
像这样.....调用FragmentTransaction.setCustomAnimations(),引用动画师或动画(取决于你是否使用了动画师或动画) 兼容性库或不)。有趣的是 setCustomAnimations()会影响添加到的所有片段转换 调用后的事务。所以你需要打电话 setCustomAnimations()之前你想要它,你可以实际 为a的每个部分设置多个不同的自定义动画 transaction(在每个之前调用setCustomAnimations()) 添加()/删除()/连接()/分离()/显示()/隐藏()/替换())......
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.push_up_in,R.anim.push_up_out);
ft.commit();
ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.push_up_in,R.anim.push_up_out);
if (fragment1.isHidden()) {
ft.show(fragment1);
} else {
ft.hide(fragment1);
}
ft.commit();
有了这个我解决了api等级11的问题希望它有效!
答案 3 :(得分:1)
如果您使用的是ViewPager
mPager.setOffscreenPageLimit(YourFragmentsSize);
这条线解决了我的问题,希望也适合你。 Referanced from this topic