アニメーション(移動、拡大縮小、回転、透過率)

(ブログ記事の一覧は「こちら」)

画像データをアニメーションさせる方法について学びましょう。

ここで学ぶこと

  • アニメーション
    • 移動アニメーション
    • 拡大縮小アニメーション
    • 回転アニメーション
    • 透過率アニメーション
    • アニメーションセット

参考書籍:

Androidプログラミングバイブル SDK 7/6/5/4対応/ソシム

例題1

基本的なアニメーションのプログラムを確認していきましょう。

作成するもの

移動、拡大縮小、回転、透過率のアニメーションは、それぞれ以下のように定義しています。(正確には、他にも定義の方法はあります。)
それぞれのアニメーションを作成します。

// 移動アニメーション
TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);

// 拡大縮小アニメーション
ScaleAnimation(fromX, toX, fromY, toY, pivotX, pivotY);

// 回転アニメーション
RotateAnimation(fromDegrees, toDegrees, pivotX, pivotY);

// 透過率アニメーション
AlphaAnimation(fromAlpha, toAlpha);

レイアウト

  • ImageView
  • Button 複数個(アニメーションを開始するために使用します)

プログラム

res / drawable フォルダに「sample.png」をコピーしてください。
PNGファイルはフリーの画像を見つけて用意してください。)

onCreate関数には、ImageViewとButtonについても記述しておいてください。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample09_main);

    final ImageView imageView = findViewById(R.id.imageView);
    imageView.setImageResource(R.drawable.sample);

}

それぞれのアニメーションのプログラムを確認していきましょう。
Buttonをクリックしたときにアニメーションが開始するようにプログラミングすると良いでしょう。

移動アニメーション

TranslateAnimation trans = new TranslateAnimation(0, 320, 0, 0);
trans.setDuration(500);
trans.setInterpolator(new LinearInterpolator());  // 等速
imageView.startAnimation(trans);

拡大縮小アニメーション

ScaleAnimation scale = new ScaleAnimation(1, 2, 1, 2, 120, 120);
scale.setDuration(500);
scale.setInterpolator(new AnticipateOvershootInterpolator()); // 変速
imageView.startAnimation(scale);

回転アニメーション

RotateAnimation rotate = new RotateAnimation(0, 360, 120, 120);
rotate.setDuration(500);
rotate.setInterpolator(new LinearInterpolator()); // 等速
imageView.startAnimation(rotate);

透過率アニメーション

AlphaAnimation alpha = new AlphaAnimation(1, 0);
alpha.setDuration(500);
alpha.setInterpolator(new LinearInterpolator());  // 等速
imageView.startAnimation(alpha);

setDurationメソッドは、アニメーションにかかる時間(ミリ秒)を引数に設定します。
setInterpolatorメソッドは、アニメーションの加速度の種類を設定します。詳しくは、上で紹介した参考書籍を参照してください。

実行、確認

それぞれのアニメーションの動作を確認してください。

例題2

複数のパターンのアニメーションを組み合わせる方法を確認してみましょう。

作成するもの

拡大と移動を同時に行うアニメーションを作成します。

レイアウト

  • ImageView
  • Button(アニメーションを開始するために使用します)

プログラム

AnimationSetクラスを使用すると、addAnimationメソッドで組み合わせたいアニメーションを追加することができます。

AnimationSet animSet = new AnimationSet(true);
animSet.setInterpolator(new LinearInterpolator());

// 拡大
ScaleAnimation scale = new ScaleAnimation(1, 2, 1, 2, 120, 120);
scale.setDuration(500);
animSet.addAnimation(scale);

// 移動
TranslateAnimation trans = new TranslateAnimation(0, 320, 0, 0);
trans.setDuration(500);
animSet.addAnimation(trans);

imageView.startAnimation(animSet);

実行、確認

拡大と移動のアニメーションが同時に行われることをを確認してください。

課題1

setRepeatCount(num) メソッドを使用すると、アニメーションを繰り返し行う回数を指定することができます。
例題1のそれぞれのアニメーションに対して、setRepeatCountメソッドを追加して、動作を確認してください。

課題2

移動アニメーションを使用して、画像を画面を1週(左上 → 右上 → 右下 → 左下 → 左上)するようなプログラムを作成してください。