我有片段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點擊時刷新片段。 –