眠いしお腹すいたし(´・ω・`)

C#関連を主に書きます。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Xamarin.Forms AndroidでNavigationPageのアニメーションを変更してみる

はじめに

全国の

Xamarin Formsで何でiOSAndroidでNavigationPageのアニメーション違うんだ。

何でAndroidはスライドインしてくれないんだ。

とお嘆きの皆様、Xamarin Formsをお楽しみでしょうか?

今回はそんなAndroidのNavigationPageのアニメーションを変更してみようかと思います。

完成系

f:id:tamafuyou:20170422151651g:plain

解説

まず今回の主なコードです。

gist.github.com

NavigationPageに表示するページはFramgmentContainerクラスというFragmentを継承したクラスにて管理されています。

一つのFragmentContainerクラスに1つのPageクラスが乗っていて、ページのアニメーションをFragmentTransactionにより行なっているイメージです。

SetupPageTransitionメソッドはNavigationPageでPushしたりPopする前に呼ばれます。

ここでSetCustomAnimationsを行うことでナビゲーションアニメーションを変更することが可能になります。

FragmentTransaction | Android Developers

アニメーションに関してはリソース登録を行なって置きます。

今回は4種類のアニメーション設定を用意しました。

f:id:tamafuyou:20170422150041p:plain

中身はこんな感じです。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
     android:fromXDelta="100%" android:toXDelta="0%"
     android:fromYDelta="0%" android:toYDelta="0%"
     android:duration="@android:integer/config_mediumAnimTime" />
</set>

Translateという物を使ってアニメーションを定義しています。

これらをpush / pop のためにSetCustomAnimationsで設定したあげています。

どうでしょうか?

まあ、Back時の動きおかしくない?って話もあるのですが今回は乗り越えることができませんでした。

もう少しFragmentのアニメーションに関して学習して乗り越えたいと思います。

最悪PRカモですが・・・

ではでは(〃^∇^)o