2017-02-24 102 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點擊時刷新片段。 –