10

我只需要简单的滑入和滑出片段过渡动画,下面是我的代码: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();

结果看起来很奇怪,当transition开始时,当前的fragment没有动画就消失了,进入的fragment(从左边)就像一张滚动的纸一样。我的动画 xml 代码有什么问题?

谢谢!

4

4 回答 4

5

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

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

于 2011-05-16T07:55:17.470 回答
3

谷歌已经更新了兼容性库,并且已经修复了过渡。你们应该从 android sdk/avd manager 更新您的兼容性库。

于 2011-05-30T19:05:28.153 回答
2

我在这里找到了一篇关于片段兼容性库动画问题的很酷的帖子,我采用了第二种方法

..... 调用 FragmentTransaction.setCustomAnimations(),引用动画师或动画(取决于您是否使用兼容性库)。有趣的是 setCustomAnimations() 会在调用后影响添加到事务中的所有片段转换。因此,您需要在使用之前调用 setCustomAnimations(),并且您实际上可以为事务的每个部分设置多个不同的自定义动画(在每个 add()/remove()/attach() 之前调用 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 的问题,希望它有效!

于 2012-09-10T14:36:33.500 回答
1

如果您使用 ViewPager

mPager.setOffscreenPageLimit(YourFragmentsSize); 

这条线解决了我的问题,希望对你也有用。引用自本主题

于 2012-11-15T08:02:21.367 回答