Activityが切り替わる時のアニメーションの設定方法です。
res/valuesフォルダにthemes.xmlを作成して以下のように記述します。
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:windowAnimationStyle">@style/Animation.Activity</item>
</style>
</resources>
parentにandroid:Themeを指定します。ActivityのアニメーションはwindowAnimationStyle要素なので、追記しています。
要素の値は次のstyles.xmlに記述します。
res/valuesフォルダの中にstyles.xmlを作成して以下のように記述します。
<resources>
<style name="AppTheme" parent="android:Theme.Light" />
<style name="Animation" parent="android:Animation" />
<style name="Animation.Activity" parent="android:Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/activity_open_enter</item>
<item name="android:activityOpenExitAnimation">@anim/activity_open_exit</item>
<item name="android:activityCloseEnterAnimation">@anim/activity_close_enter</item>
<item name="android:activityCloseExitAnimation">@anim/activity_close_exit</item>
</style>
</resources>
こちらも基本的な動作はAnimation.Activityを継承しますので、parentで指定しておきます。
今回はactivityのopenとcloseのアニメーションを変更するので、それに関係する4つの要素だけ修正します。
各要素を上から順に説明します。
1.activityOpenEnterAnimationはstartActivityなどで開く対象のactivityのアニメーションを指定します。
2.activityOpenExitAnimationはstartActivityの呼び元の閉じられるactivityのアニメーションを指定します。
3.activityCloseEnterAnimationはfinishなどで閉じる事で表示されるactivityのアニメーションを指定します。
4.activityCloseExitAnimationはfinishの呼び元の閉じるactivityのアニメーションを指定します。
4つのアニメーションを定義していきます。
resフォルダの中に新たにanimフォルダを作成し、その中にactivity_open_enter.xml、activity_open_exit.xml、activity_close_enter.xml、activity_close_exit.xmlの4つのファイルを作成します。
以下、各ファイルの記述です。
activity_open_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromYDelta="100%" android:toYDelta="0%"
android:duration="500"
android:fillAfter="true" android:fillEnabled="true"/>
</set>
activity_open_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromYDelta="0%" android:toYDelta="-100%"
android:duration="500"
android:fillAfter="true" android:fillEnabled="true"/>
</set>
activity_close_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromYDelta="-100%" android:toYDelta="0%"
android:duration="500"
android:fillAfter="true" android:fillEnabled="true"/>
</set>
activity_close_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromYDelta="0%" android:toYDelta="100%"
android:duration="500"
android:fillAfter="true" android:fillEnabled="true"/>
</set>
どれもfromYdeltaとtoYdeltaの値以外はほぼ同じ内容となっています。これは画面の座標を表しており、例えばfromYdelta=”0%” toYdelta=”100%”の場合だと画面を0%の位置から100%まで、Y方向、つまり縦に移動させることになります。Xにすれば横移動になります。
最後に、マニフェストにテーマを適用します。
テーマを適用したいActivityに
を記述します。
これで、適用完了です。