Activity切り替え時のアニメーション設定


Activityが切り替わる時のアニメーションの設定方法です。

res/valuesフォルダにthemes.xmlを作成して以下のように記述します。

<?xml version="1.0" encoding="utf-8"?>
<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を作成して以下のように記述します。

<?xml version="1.0" encoding="utf-8"?>
<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

<?xml version="1.0" encoding="utf-8"?>
<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

<?xml version="1.0" encoding="utf-8"?>
<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

<?xml version="1.0" encoding="utf-8"?>
<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

<?xml version="1.0" encoding="utf-8"?>
<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に

android:theme="@style/MyTheme"

を記述します。
これで、適用完了です。

Comments

comments

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>