Android:我的片段转换动画有什么问题?

时间:2011-05-11 04:26:26

标签: android animation transition android-fragments

我只需要简单的幻灯片并滑出动画片段转换,下面是我的代码: 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代码出了什么问题?

谢谢!

4 个答案:

答案 0 :(得分:5)

getSupportFragmentManager()意味着你正在使用Fragments的兼容包。 我有同样的问题,根本就没有动画。

请参阅http://groups.google.com/group/android-developers/browse_thread/thread/5ef5ba1be9f40c56/a846578d91a032c0?hide_quotes=yes#msg_8ca017c473818a04

答案 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