AndroidのアプリでActivityを呼び出すときのアニメーション(画面変移)を設定する方法です。何も設定しない場合は、Intent使ってActivityを呼び出したときは、ブワッっと前にでてくるアニメーションなんですけど、横にスライドしたり、透過させたりのアニメーションに変える事も可能です。このメソッドは、Activity自体に適用させるメソッドです。画面内のViewなんかに適用させるアニメーションではありません。


使うメソッドは、これ。
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>