2017-02-24 106 views
1

我有片段A和片段B.A被添加并显示。我想添加B到自定义动画的交易。当B从右侧进入时,A必须向左侧出口,并且必须以相同的时间和相同的速度一起进行。我怎样才能做到这一点?Android片段动画

实施例图像:Here(图像表示作为ViewPager使用的,但我不能使用ViewPager)

感谢您的帮助。

回答

1

首先定义你想要的动画,在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);` 
0

需要两个动画 - 片段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还接受两个可选参数popEnterpopExit,当按下后退按钮时,将动画片段的变化。如果你需要的话,你需要在方法链上添加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"/> 

希望这有助于!你可以在这里了解更多关于FragmentTransactionsetCustomAnimations的方法: https://developer.android.com/reference/android/app/FragmentTransaction.html

+0

谢谢你的回答,我会试试这个。但是,我需要使用.add()不.replace() 我可以用add()方法吗? –

+0

因为我们不想在onBackPress点击时刷新片段。 –