Android片段动画
我有片段A和片段B。A被添加并显示。我想用自定义动画将B添加到事务中。当B从右侧进入时,A必须从左侧退出,并且他们必须以相同的时间和速度一起完成。我怎样才能做到这一点 示例图像:(图像显示为使用了ViewPager,但我不能使用ViewPager)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
感谢您的帮助。首先在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
还接受两个可选参数pocenter和popExit,当按下后退按钮时,这两个参数将设置片段更改的动画。如果需要,需要将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"/>