我有片段A和片段B.A被添加并显示。我想添加B到自定义动画的交易。当B从右侧进入时,A必须向左侧出口,并且必须以相同的时间和相同的速度一起进行。我怎样才能做到这一点?Android片段动画
实施例图像:Here(图像表示作为ViewPager使用的,但我不能使用ViewPager)
感谢您的帮助。
我有片段A和片段B.A被添加并显示。我想添加B到自定义动画的交易。当B从右侧进入时,A必须向左侧出口,并且必须以相同的时间和相同的速度一起进行。我怎样才能做到这一点?Android片段动画
实施例图像:Here(图像表示作为ViewPager使用的,但我不能使用ViewPager)
感谢您的帮助。
首先定义你想要的动画,在res /像这样
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>
left_in.xml将是一样的,除了用+ toXDelta
right_in。 XML
<translate
android:fromXDelta="-100%p"
android:toXDelta="0"
android:duration="@android:integer/config_longAnimTime"/>
</set>
然后,在片段A的onAttach
为 '左出'
overridePendingTransition(R.anim.left_in, R.anim.left_out);
和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
还接受两个可选参数popEnter和popExit,当按下后退按钮时,将动画片段的变化。如果你需要的话,你需要在方法链上添加addToBackStack()
。
放入res/anim
目录后续动画文件:
enter_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"/>
注意我们是如何从100%(一直向右)转换的X值,到0%。这将从右向左滑动FragmentB。
最后,我们需要一个exit_left
动画FragmentA退出到左侧。我们将把这个观点从0%移到-100%。
exit_left.xml
<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
的方法: https://developer.android.com/reference/android/app/FragmentTransaction.html
谢谢你的回答,我会试试这个。但是,我需要使用.add()不.replace() 我可以用add()方法吗? –
因为我们不想在onBackPress点击时刷新片段。 –