Xamarin.Android で Fragment の切り替えによってページ遷移を実現しているんだけど、 iOS の UINavigationController みたいな遷移アニメーションをなんとか実装できたので、 メモを残しておく。
まず、右から左にスライドインするアニメーションが Android.Resource.Animation に無かったので、Resources/anim/slide_in_right.xml を作成。
<?xml version="1.0" encoding="UTF-8" ?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
右から左にスライドアウトするアニメーションも無かったので、Resources/anim/slide_out_left.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_mediumAnimTime"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_mediumAnimTime" /> </set>
あとは、SupportFragmentManager を使ってフラグメントを切り替える際に、作成したアニメーションの ID を指定する。
var transaction = SupportFragmentManager.BeginTransaction();
transaction.AddToBackStack(null);
transaction.SetCustomAnimations(
Resource.Animation.slide_in_right,
Resource.Animation.slide_out_left,
Android.Resource.Animation.SlideInLeft,
Android.Resource.Animation.SlideOutRight);
transaction.Replace(
containerViewId,
fragment);
transaction.Commit();
戻るとき左から右にスライドするアニメーションは Android.Resource.Animation にあったので、それを使っておく。