アニメーションに変化をもたらす「Interpolator」
これまで、基本的なAnimationを合成して、複雑なアニメーションを生成し、制御を行う方法を見てきました。
その制御の1つに「Interpolator」の設定があります。Interpolatorを「Animation#setInterpolator(Interpolator)」メソッドで設定することによって、アニメーションの動作に変化を加えられます。
クラス名 | 説明 |
---|---|
AccelerateDecelerateInterpolator | 加速と減速 |
AccelerateInterpolator | 加速 |
AnticipateInterpolator | 開始時に逆方向に溜める |
AnticipateOvershootInterpolator | 開始時に逆方向に溜め、終了時にはみ出す |
BounceInterpolator | 終了時にバウンド |
CycleInterpolator | 設定したアニメーションの負の方向も使用しながら繰り返す |
DecelerateInterpolator | 減速 |
LinearInterpolator | 変化を加えない |
OvershootInterpolator | 終了時にはみ出す |
表7 用意されているInterpolator |
では、実際の動作を見てみてください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Interpolatorには、パラメータが用意されているものがあります。画面の上から4番目(数値の「5」が入力されている個所)がパラメータです。そこに実数を与えて動作を見てみてください。多くのパラメータは小さめの値を指定すると、自然な効果が得られますが、今回は変化が分かりやすいように大きめの値を設定しています。
アニメーションはXMLでリソース化できる
これまで見たアニメーションは、すべてコーディングによるものでした。一方でアニメーションの定義ファイルをXMLであらかじめ用意しておき、それを実行時に読み込ませることも可能です。
アニメーション定義XMLは「res/anim」フォルダに拡張子「.xml」で作成します。ADTのウィザードから作成しても、手動で生成しても構いません。
アニメーション定義ファイルは、エディタによる支援が受けられないので、使用可能な要素や属性を把握しておかなければなりません。
使用可能な要素
XMLのルート要素として、<alpha><rotate><scale><translate><set>が定義できます。それぞれ、すでに紹介したAlphaAnimation、RotateAnimation、ScaleAnimation、TranslateAnimation、AnimationSetクラスに対応します。動作や設定項目はそれぞれのクラスに対応しています。<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】親がフルスクリーンか
アニメーションでは、自由に描画位置を移動できますが、親のオブジェクトがフルスクリーンではなかった場合、親の描画範囲外ではアニメーションは表示されません。
- グーグルのAPIを使うときに欠かせないGoogle OAuthの作り方と使い方
- 細か過ぎて伝わってないけど開発者が知っておきたいAndroid Mの新機能まとめ
- 腕時計から電話をかけるAndroid Wearアプリの作り方
- Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方
- Android 5.0発表&スマホと連動する音声認識Android Wearアプリの作り方
- ウェアラブル端末用Android Wearアプリ開発の基礎知識
- 変わらないと生き残れないAndroid Lの新機能まとめ
- Android WearやIoTで注目のAndroidセンサー機能8選
- ウェアラブル時代に見直したいAndroidの加速度/重力センサー、ジャイロスコープ
- あなたの知らないAndroid SDKの便利tools、14選まとめ
- Android 4.4のメモリ使用状況を把握する3つのツールの使い方
- Androidでリアルタイムマルチプレーゲームを開発するには
- 低性能端末でも使えるか? Android 4.4 KitKatの新機能39選
- もはや無料BaaS。ゲーム以外でも使いたくなるGoogle Play Game Servicesのデータ管理機能
- アプリにGoogle+のソーシャルグラフを持ち込めるGoogle Play Game Servicesの基礎知識
- あなたのアプリはクラウドにデータをバックアップできますか?
- Eclipse ADTに代わるIDEとなるか? Android Studioの基礎知識
- ActionBarで、アプリのUIはこんなにスマートになる
- Android 4.x時代のアプリにないと残念なActionBarとは
- 動的クラスローディングでAndroidアプリ“裏”開発
- Android 4.xのAndroidビームをアプリに組み込むには
- AndroidアプリでNFCタグを読み書きするための基礎知識
- 新タブレット時代を見据えるAndroid 4.2の新機能9選
- Androidからイヤフォンやヘルス機器とBluetooth通信するには
- Bluetoothを使ってAndroidアプリ同士で通信するには
- Androidアプリをアプリ内購読に対応してもうける方法
- 開発者が知らないと残念過ぎるAndroid 4.1の新機能36選
- Androidのプロセス間通信を自由自在にするAIDL
- Android 4.0のサービス/プロセス間通信の基本
- Androidアプリでマルチメディアを扱うための基礎知識
- Androidのウィジェットにノーティフィケーションするには
- Android 4.0で注目の顔認識をアプリに組み込むには
- Android 4.0でアプリ開発を始めるための環境構築
- 開発者が知らないと損するAndroid 4.0の新機能44選
- Android Compatibility packageで2.x系でもマルチサイズ対応
- Androidの画面の大きさの違いを解決するFragments
- Android 3.0の新APIで簡単ドラッグ&ドロップ実装
- 開発者が知って得するAndroid 2.3の新機能18選
- アニメーションでAndroidに独創的な画面エフェクトを
- Androidアプリで“アニメーション”するための基礎知識
- XMLレイアウトでAndroidアプリに“設定画面”を追加
- 開発者が知っておきたいAndroid 2.2の新機能12連発
- もはやケータイに必須のカメラをAndroidで制御しよう
- 地図/位置情報/GPSを使うAndroidアプリを作るには
- Android NDKでJNIを使用してアプリを高速化するには
- Android 2.1の新機能「Live Wallpaper」で作る、美しく燃える“待ち受け”
- iPhoneより多彩なAndroidのセンサをアプリで操作
- SurfaceViewならAndroidで高速描画ゲームが作れる
- Android 1.6のジェスチャーとテキスト読み上げを使う
- Androidのホーム画面に常駐するアプリを作るには
- Netbookにも広まるAndroidで、かつてないWeb体験を
- アプリを国際化してAndroid Marketから世界へ発信
- 常駐アプリが作成できるAndroidの“サービス”とは
- AndroidでSQLiteのDB操作をするための基礎知識
- Androidアプリの使いやすさを左右する5つのレイアウト
- 簡単でワクワクするAndroidウィジェット10連発!
- ブラウザや地図、ストリートビューの基、Intentとは?
- Androidアプリ作成の基本“Activity”とは何か?
- Android Market配布を目指しEclipseでHelloWorld!
Copyright © ITmedia, Inc. All Rights Reserved.