Androidアプリ開発メモ068:Tweenアニメーション
Viewに対して回転やサイズ変更などをすることでアニメーションを作成する。
下記のクラスを利用できるが、クラスを直接利用するのではなくXMLでリソースファイルとして定義してプログラムに読み込んで利用することがほとんど。
| クラス | 説明 | XML要素 |
|---|---|---|
| AlphaAnimation | アルファ値変更 | <alpha> |
| RotateAnimation | 回転 | <rotate> |
| ScaleAnimation | 拡大・縮小 | <scale> |
| TranslateAnimation | 移動・変形 | <translate> |
上表のクラスは android.view.animation.Animationクラスを継承している。
アニメーションの定義の例。下記の定義はだんだん濃くなりながら回転していくアニメーションである。
ファイル名は制限はない。例えば tween.xml とかにしておく。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="3000" />
<rotate android:fromDegrees="0" android:toDegrees="360"
android:pivotX="50%" android:pivotY="50%"
android:duration="3000" />
</set></pre>
android:interpolator属性はアニメーションの変化の割合を指定する。値は下表参照。
| 属性 | 説明 |
|---|---|
| @android:anim/accelerate_interpolator | 動きがだんだん速くなる |
| @android:anim/accelerate_decelerate_interpolator | 動きがだんだん遅くなる |
属性にはalpha、rotate、scale、translateの各要素に固有のものと、共通のものがある。それぞれの意味は参考ページを参照。
下記は1秒で縦に縮んで、2秒で元に戻るアニメーションの例。
android:startOffset属性を使って、前半のscale要素で定義した動きが終わってから後半のscale要素で定義した動きが始まるように、後半のscale要素にはandroid:startOffset属性を持たせてある。
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="false"
android:fillAfter="true" >
<scale android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="1.0" android:toYScale="0.5"
android:pivotX="50%" android:pivotY="50%"
android:duration="1000" />
<set android:interpolator="@android:anim/accelerate_interpolator">
<scale android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="1.0" android:toYScale="2.0"
android:pivotX="50%" android:pivotY="50%"
android:startOffset="1000" android:duration="2000" />
</set>
</set>
上記の例で注意点が2つ。
まず、アニーメーションが終わった後そのままの状態を保つためにandroid:fillAfter属性をtrueとしているが、この属性はscale要素など個々の動きを定義する要素に設定しても効かない。Tweenアニメーションの定義のトップレベルのset要素に設定しないと意味がないようだ。
また、後半のscale要素のY軸方向の値は1.0~2.0としている。縮めた物体を元に戻すなら0.5~1.0のような気がするが、それでは思ったようなアニメーションにはならない。
scale要素のandroid:fromXScale属性などの値はそこで定義されたアニメーションが始まる時点の大きさが基準となるからである。
0.5~1.0では前半の動きで既に大きさの0.5倍になっているところからさらに0.5倍(元の大きさの0.25倍)からはじまって、1倍(0.5×1.0で元の0.5倍)の大きさで終わってしまう。1.0~2.0なら元の大きさの0.5倍(0.5×1.0)から始まって、元の大きさ(0.5×2.0)となる。
tweenアニメーションのリソースファイルを読み込んで実行する onCreate() の例。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView img = (ImageView)findViewById(R.id.test_image);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.tween);
img.startAnimation(animation);
}
参考文献:Androidアプリケーション開発標準資格教科書 10-5 NDKの概要
参考ページ:
7.5.1 アニメーションリソース - ソフトウェア技術ドキュメントを勝手に翻訳
Viewにアニメーションを付与する(Tweenアニメーション) << Tech Booster
Androidアプリのアニメーションリソースの使い方、定義方法 | mucchinのAndroid戦記









Recent Comments