Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android片段动画_Android_Android Fragments_Animation_Fragment - Fatal编程技术网

Android片段动画

Android片段动画,android,android-fragments,animation,fragment,Android,Android Fragments,Animation,Fragment,我有片段A和片段B。A被添加并显示。我想用自定义动画将B添加到事务中。当B从右侧进入时,A必须从左侧退出,并且他们必须以相同的时间和速度一起完成。我怎样才能做到这一点 示例图像:(图像显示为使用了ViewPager,但我不能使用ViewPager) 感谢您的帮助。首先在res/anim中定义所需的动画,如下所示 left_out.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schem

我有片段A和片段B。A被添加并显示。我想用自定义动画将B添加到事务中。当B从右侧进入时,A必须从左侧退出,并且他们必须以相同的时间和速度一起完成。我怎样才能做到这一点

示例图像:(图像显示为使用了ViewPager,但我不能使用ViewPager)


感谢您的帮助。

首先在res/anim中定义所需的动画,如下所示

left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="0"
    android:toXDelta="-100%p"
    android:duration="@android:integer/config_longAnimTime"/>
</set>
对于片段B,使用

overridePendingTransition(R.anim.right_in, R.anim.right_out);`

您需要两个动画-片段A将使用
exit_left.xml
进行退出动画,片段B将使用
enter_right.xml
进行进入动画

首先,当我们将FragmentA附加到活动时,我们设置其退出动画:

FragmentA fragmentA = new FragmentA();

getSupportFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.fragment_a_enter, R.anim.exit_left)
            .add(R.id.container, fragmentA, FRAGMENT_A_TAG)
            .commit();
然后,我们想用FragmentB替换FragmentA。所以我们需要为FragmentB设置ENTER动画

FragmentB fragmentB = new FragmentB();

getSupportFragmentManager()
            .beginTransaction()
            .setCustomAnimations(R.anim.enter_right, R.anim.fragment_b_exit)
            .replace(R.id.container, fragmentB, FRAGMENT_B_TAG)
            .commit();
注意:
setCustomAnimations
还接受两个可选参数pocenterpopExit,当按下后退按钮时,这两个参数将设置片段更改的动画。如果需要,需要将
addToBackStack()
添加到方法链中

将以下动画文件放置在
res/anim
目录中:

输入_right.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="100%" android:toXDelta="0%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_mediumAnimTime"/>
<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:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_mediumAnimTime"/>

希望这有帮助!您可以在此处了解有关
FragmentTransaction
setCustomAnimations
方法的更多信息:

谢谢你的回答,我试试这个。但是,我需要使用.add()而不是.replace(),我可以用add()方法来完成吗?因为当点击onBackPress时,ı不想刷新片段。
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="100%" android:toXDelta="0%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_mediumAnimTime"/>
<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:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:duration="@android:integer/config_mediumAnimTime"/>