@blog.justoneplanet.info

日々勉強

androidでActivityが切り替わるときのアニメーションを変える

activityが切り替わるときにアニメーションをさせたくなくなった。

■実装

res/values/style.xml

以下のようにテーマを定義する。

<resource>
    <style name="NoAnimationTheme" parent="android:Theme">
        <item name="android:windowAnimationStyle">@style/Animation.Activity</item> 
    </style>
    <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>
</resource>

anim/activity_open_enter.xml

startActivityで開くActivityのanimation。

<?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:fromXDelta="100%"
        android:toXDelta="0%"
        android:duration="0"
        android:fillAfter="true"
        android:fillEnabled="true"/>
</set>

anim/activity_open_exit.xml

startActivityで閉じるActivityのanimation。

<?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:fromXDelta="0%"
        android:toXDelta="-100%"
        android:duration="0"
        android:fillAfter="true"
        android:fillEnabled="true"/>
</set>

anim/activity_close_exit.xml

finishで閉じるActivityのanimation。

<?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:fromXDelta="0%"
        android:toXDelta="100%"
        android:duration="0"
        android:fillAfter="true"
        android:fillEnabled="true"/>
</set>

anim/activity_close_open.xml

finishで開くActivityのanimation。

<?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:fromXDelta="-100%"
        android:toXDelta="0%"
        android:duration="0"
        android:fillAfter="true"
        android:fillEnabled="true"/>
</set>
参考

上述の内容などは以下のような参考サイトに情報がある。

AndroidManifest.xml

アプリケーション全体に適用する

以下のようにapplicationタグに記述することでアプリケーション全体に変更したアニメーションを適用できる。

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/NoAnimationTheme">
アクティビティに適用する

以下のようにactivityタグに記述することで単一のアクティビティにのみ変更したアニメーションを適用できる。

<activity
    android:label="@string/app_name"
    android:name=".MainActivity">
</activity>

■応用

上述の方法だと特定の条件下でのみアニメーションを変えるといったことができない。条件によってanimationを変えたい場合は、以下のようにすることで対応できる。

public class MainActivity extends Activity {
    /**
     * 起動時に実行される
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.NoAnimationTheme);// super.onCreateの前に実行する必要がある
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment