2013年3月18日月曜日

ViewFlipperでアニメーションする(ViewAnimator)

アニメーションは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