片段滑出动画不起作用

时间:2014-11-19 09:29:00

标签: android animation fragment

我有一个Android应用程序,我点击按钮从一个片段加载另一个片段

Fragment fragment = new EditImagesFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction tran = fragmentManager.beginTransaction();
tran.setCustomAnimations(R.anim.push, R.anim.pop);
tran.replace(R.id.content_frame, fragment).addToBackStack(null).commit();

我有推送和弹出(滑入和滑出)类动画定义如下

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="1000"
        android:valueTo="0"
        android:valueType="floatType" />

</set>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-1000"
        android:valueType="floatType" />

</set>

现在,当我加载片段时,它按预期滑入,但当我按下后退按钮并尝试返回时滑出动画不起作用,我支持v14及以上API级别。 任何人都可以发现这个问题吗?

由于

3 个答案:

答案 0 :(得分:4)

尝试

  

setCustomAnimations(int enter,int exit,int popEnter,int popExit)

而不是

  

setCustomAnimations(int enter,int exit)

根据Android documentation输入退出动画将无法播放从后筹码弹出

答案 1 :(得分:3)

你应该使用FragmentTransaction.setCustomAnimations(...)的4 params方法而不是2。

另外,既然你使用了原生片段api(api 14+),我想动画xmls应该放在animator res文件夹中。

答案 2 :(得分:1)

尝试:

 fragmentTransaction.setCustomAnimations(R.anim.enter_new_screen, 0, 0,R.anim.remove_fragment);

enter_new_screen:

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

remove_fragment:

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

setcustomanimations方法在片段的情况下需要四个参数,配对我不是很好的解释,但这是一个解决方法。尝试一下,让我知道它是否有效。