以下の記述は、Android 2.3.3以降を対象にしています。

Androidには画像をアニメーションさせる機能が最初から実装されています。

種類は5つ。

●  透明度(AlphaAnimation)
●  角度(RotateAnimation)
●  スケール(ScaleAnimation)
●  移動(TranslateAnimation)
●  組み合わせ(AnimationSet)

これらを使用することで、以下のようなアニメーションを作ることができます。



これは、背景を透過した5つの静止画を順番に、透明度・角度・スケール・移動を変化させながら表示しています。



回転については、Androidのアニメーション機能2 を参照。






基本コードを見ていきます。

こういう画像を独立して動かしてみます。



ImageViewを使って表示させます。

import android.widget.ImageView;
import android.view.View;


ImageView iv_hyakki_1;


iv_hyakki_1 = new ImageView(this);
//透明度を変化させるので最初は非表示にしています、表示させる場合はView.VISIBLE
iv_hyakki_1.setVisibility(View.GONE);
iv_hyakki_1.setImageResource(R.drawable.hyakki_1);
addContentView(iv_hyakki_1,new LayoutParams());




import android.view.animation.AnimationSet;
import android.view.animation.AlphaAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.view.animation.RotateAnimation;


透明度

透明度を非表示(0)の状態から表示(1)まで、4秒かけて変化させてみます。

AlphaAnimation anim_alpha = new AlphaAnimation(0f, 1f); // 透明度を0から1に変化
anim_alpha.setDuration(4000); //ms単位
iv_hyakki_1.setVisibility(View.VISIBLE);//表示
iv_hyakki_1.startAnimation(anim_alpha); //アニメーション開始

角度

画像の中心を軸にして、4秒かけてぐるっと360度回転させてみます。

RotateAnimation anim_rotate = new RotateAnimation(0, 360, iv_hyakki_1.getWidth()/2, iv_hyakki_1.getHeight()/2);
anim_rotate.setDuration(4000); //ms単位
iv_hyakki_1.setVisibility(View.VISIBLE);//表示
iv_hyakki_1.startAnimation(anim_rotate); //アニメーション開始

スケール

画像のサイズを、4秒かけて半分にしてみます。

ScaleAnimation anim_scale = new ScaleAnimation(1, 0.5f, 1, 0.5f);
anim_scale.setDuration(4000); //ms単位
iv_hyakki_1.setVisibility(View.VISIBLE);//表示
iv_hyakki_1.startAnimation(anim_scale); //アニメーション開始

移動

画像を(0,0)から(100,50)の位置に4秒かけて移動してみます。

移動の基準点は、画像の左上隅です。

TranslateAnimation anim_translate = new TranslateAnimation(0, 100, 0, 50); //(0,0)から(100,50)に移動
anim_translate.setDuration(4000); //ms単位
iv_hyakki_1.setVisibility(View.VISIBLE);//表示
//これをセットしておかないと、画像は移動後、元位置に帰ってしまいます(AndroidのICS以降有効)
anim_translate.setFillAfter(true);
iv_hyakki_1.startAnimation(anim_translate); //アニメーション開始




透明度・角度・スケール・移動を組み合わせ

AnimationSet anim_set;




TranslateAnimation anim_translate;
ScaleAnimation anim_scale;
AlphaAnimation anim_alpha;
RotateAnimation anim_rotate;

//アニメーションのセットを作っておく
anim_set = new AnimationSet(true);

//透明度
anim_alpha = new AlphaAnimation(0f, 1f);
anim_set.addAnimation(anim_alpha);

//角度
anim_rotate = new RotateAnimation(0, 360, iv_hyakki_1.getWidth()/2, iv_hyakki_1.getHeight()/2);
anim_set.addAnimation(anim_rotate);

//スケール
anim_scale = new ScaleAnimation(1, 0.5f, 1, 0.5f);
anim_set.addAnimation(anim_scale);

//移動
anim_translate = new TranslateAnimation(0, 100, 0, 50); // (0,0)から(100,50)に移動
anim_set.addAnimation(anim_translate);

//
anim_set.setDuration(4000);
anim_set.setFillAfter(true);

//アニメーション開始
iv_hyakki_1.setVisibility(View.VISIBLE);
iv_hyakki_1.startAnimation(anim_set);




複数の画像を連続して表示する場合

やり方はいろいろありますが、ここではトリガーになりそうなイベントを取得してみます。

アニメーションの開始・終了・繰り返しのイベントを取得

import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;


Activityにimplements AnimationListenerをセット


例えば、imageviewでstartAnimationする場合、その前でイベントをセットしておきます。

imageview.setAnimationListener(this);


@Override
public void onAnimationEnd(Animation animation) {
    //ToDo
    //1つのアニメーション終了をここで検知して、次のアニメーションを開始
}


@Override
public void onAnimationRepeat(Animation animation) {
    //ToDo
}


@Override
public void onAnimationStart(Animation animation) {
    //ToDo
}