連載
» 2010年09月15日 00時00分 公開

Androidで動く携帯Javaアプリ作成入門(20):Androidアプリで“アニメーション”するための基礎知識 (3/3)

[緒方聡,株式会社イーフロー]
前のページへ 1|2|3       

アニメーションに変化をもたらす「Interpolator」

 これまで、基本的なAnimationを合成して、複雑なアニメーションを生成し、制御を行う方法を見てきました。

 その制御の1つに「Interpolator」の設定があります。Interpolatorを「Animation#setInterpolator(Interpolator)」メソッドで設定することによって、アニメーションの動作に変化を加えられます。

クラス名 説明
AccelerateDecelerateInterpolator 加速と減速
AccelerateInterpolator 加速
AnticipateInterpolator 開始時に逆方向に溜める
AnticipateOvershootInterpolator 開始時に逆方向に溜め、終了時にはみ出す
BounceInterpolator 終了時にバウンド
CycleInterpolator 設定したアニメーションの負の方向も使用しながら繰り返す
DecelerateInterpolator 減速
LinearInterpolator 変化を加えない
OvershootInterpolator 終了時にはみ出す
表7 用意されているInterpolator

 では、実際の動作を見てみてください。


 Interpolatorには、パラメータが用意されているものがあります。画面の上から4番目(数値の「5」が入力されている個所)がパラメータです。そこに実数を与えて動作を見てみてください。多くのパラメータは小さめの値を指定すると、自然な効果が得られますが、今回は変化が分かりやすいように大きめの値を設定しています。

アニメーションはXMLでリソース化できる

 これまで見たアニメーションは、すべてコーディングによるものでした。一方でアニメーションの定義ファイルをXMLであらかじめ用意しておき、それを実行時に読み込ませることも可能です。

 アニメーション定義XMLは「res/anim」フォルダに拡張子「.xml」で作成します。ADTのウィザードから作成しても、手動で生成しても構いません。

 アニメーション定義ファイルは、エディタによる支援が受けられないので、使用可能な要素や属性を把握しておかなければなりません。

使用可能な要素

 XMLのルート要素として、<alpha><rotate><scale><translate><set>が定義できます。それぞれ、すでに紹介したAlphaAnimationRotateAnimationScaleAnimationTranslateAnimationAnimationSetクラスに対応します。動作や設定項目はそれぞれのクラスに対応しています。<set>は、ほかの要素をネストできます。

共通属性

 すべての要素の共通属性は以下の通りです。

属性名 説明
xmlns:android "http://schemas.android.com/apk/res/android"を指定。ルート要素のみ必要
android:duration アニメーション時間をミリ秒で設定
android:fillAfter アニメーション後の状態を保つ
android:fillBefore アニメーション後に開始状態に戻す
android:fillEnabled fillBeforeとfillAfterの制御
android:interpolator Interpolatorを設定
android:repeatCount 繰り返し回数を設定
android:repeatMode 繰り返しモードを設定
android:startOffset 開始遅延時間を設定
android:zAdjustment Zオーダーを設定
表8 共通属性

 XMLから指定可能なInterpolatorはandroid.R.animに定義されています。具体的には、以下のような形式で指定します。

android:interpolator="@android:anim/accelerate_interpolator"

 それ以外の詳細については、Animationのオプションを参照してください。

個々の属性

 それぞれの要素の固有の属性は、以下の通りです。

要素名 属性名 説明
<alpha> android:fromAlpha 開始透明度を指定
android:toAlpha 終了透明度を指定
<rotate> android:fromDegrees 開始角度を指定
android:toDegrees 終了角度を指定
android:pivotX 回転X軸を指定
android:pivotY 回転Y軸を指定
<scale> android:fromXScale 開始Xサイズを指定
android:toXScale 終了Xサイズを指定
android:fromYScale 開始Yサイズを指定
android:toYScale 終了Yサイズを指定
android:pivotX 原点X座標を指定
android:pivotY 原点Y座標を指定
<translate> android:fromXDelta 開始位置X座標を指定
android:toXDelta 終了位置X座標を指定
android:fromYDelta 開始位置Y座標を指定
android:toYDelta 終了位置Y座標を指定
<set> android:shareInterpolator Interpolatorを共有するかどうかを指定
表9 個々の属性

リソースの読み込み

 XMLで用意しておいたリソースは、「AnimationUtils#loadAnimation()」メソッドで読み込みます。具体的な使用方法は、以下の通りです。

Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);

 今回用意したのサンプルには、すべての要素を使用したアニメーションXMLと、それを読み込むサンプルが含まれているので、動作と内容を確認してみてください。

アニメーションを使う際の3つの落とし穴

 アニメーションは、コーディングでもXMLでも比較的簡単に実現できることが理解できたでしょうか。

 最後に、筆者が気付いたアニメーションを使用する際の落とし穴を紹介して、今回は締めくくりたいと思います。

 次回は、アニメーションの応用でエフェクト効果を解説します。

落とし穴【1】キャンセル

 アニメーションのキャンセルは、キャンセル後にそのアニメーションの第1フレームが表示されたままの状態になってしまいます。この問題にどのように対処すればよいのかは分かっていませんが、「キャンセルしない」というのが最上策かもしれません。

落とし穴【2】イベント

 本稿では、ボタンをアニメーションさせました。アニメーション中、ボタンはいろいろな場所に移動しますが、「元の場所に引き続きボタンの実体は残っている」ということを考慮しなければなりません。

 つまり、「アニメーション開始時などで、ボタンのイベントを受け付けないようにする」などの対応が必要です。

落とし穴【3】親がフルスクリーンか

 アニメーションでは、自由に描画位置を移動できますが、親のオブジェクトがフルスクリーンではなかった場合、親の描画範囲外ではアニメーションは表示されません。


「Androidで動く携帯Javaアプリ作成入門」バックナンバー
前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。