アニメーションはViewFlipper独自の機能というわけではありません。ViewFlipperの親クラスであるViewAnimatorのメソッドにより実現しています。
android.widget.ViewAnimator を継承しているクラスは多くはありませんが、リファレンスでは以下の4つのウィジェットがあります(参照)。
- ViewFlipper
- ViewSwitcher
- ImageSwitcher
- TextSwitcher
以下ではViewFlipperをベースにViewAnimatorの機能を記載していますが、
上記4つのウィジェットは、いずれも今回紹介するアニメーションの設定方法が利用できます。
アニメーションする
アニメーションする方法はソースコードで指定する場合と、XMLでの指定の2通りがあります。
ソースコードからの指定で、アニメーションに必要なメソッドは以下の通りです。
- ViewAnimator#setInAnimation(Animation inAnimation)
- ViewAnimator#setOutAnimation(Animation inAnimation)
スクリーンにViewが表示されるタイミング/非表示になるタイミングでアニメーションを設定できます。
1 2 3 4 5 | case R.id.prevButton: viewFlipper.setInAnimation(AnimationUtils.loadAnimation( this , android.R.anim.slide_in_left)); viewFlipper.showPrevious(); break ; |
上記サンプルでは、AnimationUtilsをつかってAndroid SDK標準で用意されているアニメーションを利用しています。
Android SDKのアニメーションのリソース一覧は以下の通りです。
Android.R.anim
リソース名 | 動きの説明 |
---|---|
accelerate_decelerate_interpolator | 開始と終了時に減速する |
accelerate_interpolator | 加速しながら |
anticipate_interpolator | 移動方向と逆に動いてから移動開始 |
anticipate_overshoot_interpolator | 移動方向と逆に動いてから移動を開始、終了地点を行き過ぎて戻る |
bounce_interpolator | バウンド |
cycle_interpolator | 回転 |
decelerate_interpolator | 速度を落としながら |
fade_in | フェードイン |
fade_out | フェードアウト |
linear_interpolator | 等速移動 |
overshoot_interpolator | オーバーシュート(少し行き過ぎて戻る) |
slide_in_left | スライドイン(右) |
slide_out_right | スライドアウト(左) |
上記以外にも、自分でカスタマイズしたアニメーションをViewに指定することもできます。
(カスタマイズの方法については、次回を予定しています)
XMLから設定する
ソースコードからAnimationを生成する以外にもXMLからもアニメーション指定が可能です
1 2 3 4 5 6 | <ViewFlipper android:id= "@+id/flipper" android:inAnimation= "@android:anim/fade_in" android:layout_width= "fill_parent" android:layout_height= "fill_parent" > <include android:id= "@+id/firstlayout" layout= "@layout/first" /> <include android:id= "@+id/secondlayout" layout= "@layout/second" /> <include android:id= "@+id/thirdlayout" layout= "@layout/third" /> </ViewFlipper> |
サンプルコードでは、android:inAnimation属性で"fade_in"を指定しています。XMLへ記載するだけで、アニメーションが有効になるのでとても使い勝手のよい設定方法です。
アニメーションの種類については前述の表のすべてを利用できるほか、標準のリソースは@android:animで指定します。
ViewAnimatorに関するXMLの属性は以下の2つが用意されています。
- android:inAnimation
- android:outAnimation