AndroidのアプリでActivityを呼び出すときのアニメーション(画面変移)を設定する方法です。何も設定しない場合は、Intent使ってActivityを呼び出したときは、ブワッっと前にでてくるアニメーションなんですけど、横にスライドしたり、透過させたりのアニメーションに変える事も可能です。このメソッドは、Activity自体に適用させるメソッドです。画面内のViewなんかに適用させるアニメーションではありません。
使うメソッドは、これ。
NextActivityを呼び出してアニメーションを適用したい場合は、インテントを呼び出した後で、こんな感じにoverridePendingTransitionを使います。
下記のサンプルのアニメーションは、新しいActivityを右らから左にスライドさせて、古いActivityを元の位置から左側に追い出してます。
in_anim.xml
out_anim.xml
*呼び出したActivityから元のActivityに戻るときにもアニメーションを設定したい場合は、呼び出したActivity側でもoverridePendingTransitionを設定してやる必要があります。
使うメソッドは、これ。
overridePendingTransition ( R.anim.in_anim, R.anim.out_anim);ActivityでIntentを呼び出した後に、上記のコードを呼び出します。
NextActivityを呼び出してアニメーションを適用したい場合は、インテントを呼び出した後で、こんな感じにoverridePendingTransitionを使います。
Intent i = new Intent(this, NextActivity.class); startActivity(i); overridePendingTransition ( R.anim.in_anim, R.anim.out_anim);この場合、NextActivityはin_animで設定したアニメーションが適用され、Intentを呼び出したクラスには、out_animが適用されます。
animの設定
アニメーションはxmlファイルで指定します。overridePendingTransitionで渡した引数がアニメーションが書かれたxmlのファイルです。で、xmlは、resの配下にanimフォルダー内に設置します。animフォルダーがresフォルダーの配下にない場合は、animとフォルダー名を指定して、フォルダーを新規作成してください。下記のサンプルのアニメーションは、新しいActivityを右らから左にスライドさせて、古いActivityを元の位置から左側に追い出してます。
in_anim.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="200"/> </set>横(X)方向の位置を右側(-100%p)において、Xの位置を元の場所(0)に戻すアニメーションを設定しています。
out_anim.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="200"/> </set>左側に抜けていかせたいので、元の位置から画面一個分(100%p)左側に移動させてます。
*呼び出したActivityから元のActivityに戻るときにもアニメーションを設定したい場合は、呼び出したActivity側でもoverridePendingTransitionを設定してやる必要があります。
使えるアニメーションのタグ
translateは、移動させるアニメーションを定義しているんですが、察するに、多分この辺(Animation Resources : View)のアニメーションのタグが使えるんじゃないのかと思います。- alpha : 透過
- translate : 移動
- rotate : 回転
- scale : 拡大・縮小
複数のアニメーションを適用することも可能
たとえば、translateとalphaとrotateを組み合わせたりってこともできます。<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.2"
android:fromYScale="1.2"
android:toXScale="1.0"
android:toYScale="1.0"
android:pivotY="0.0"
android:pivotX="0.5"
android:duration="300" />
<translate
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="250"/>
<rotate
android:fromDegrees="15"
android:toDegrees="0"
android:pivotX="0%"
android:pivotY="100%"
android:duration="300"
android:startOffset="0" />
</set> 