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戦記
« Android SDK tools, Revision 21 に更新 | Main | PostgreSQLのコマンドラインクライアントpsql »
「Java」カテゴリの記事
- 正規表現メモ(2013.10.07)
- Androidアプリ開発メモ068:Tweenアニメーション(2012.11.18)
- Androidアプリ開発メモ067:NDKのサンプルを動かしてみた(2012.09.10)
- JNI その2:ネイティブコードからJavaメソッドを呼び出す(2012.08.29)
- JNI その1:Javaからネイティブコードを呼び出す(2012.08.26)
「プログラミング、技術情報」カテゴリの記事
- PHPStorm 2018.1.7 に更新(2018.12.09)
- 技術メモをQiitaに移行(2016.01.24)
- 正規表現メモ:ものぐさ(最小)マッチング(2015.11.29)
- BASE64にエンコード/デコードするバッチファイル(2015.11.23)
- Windows7の検索ボックスの検索条件指定(フォルダの除外など)(2015.08.16)
「Androidアプリ開発」カテゴリの記事
- Androidアプリ開発メモ068:Tweenアニメーション(2012.11.18)
- Android SDK tools, Revision 21 に更新(2012.11.18)
- Androidアプリ開発メモ067:NDKのサンプルを動かしてみた(2012.09.10)
- Androidアプリ開発メモ066:Android SDK tools Rev.20 で変わった事(2012.07.12)
- Androidアプリ開発メモ065:ライブフォルダ(2012.07.11)
The comments to this entry are closed.
« Android SDK tools, Revision 21 に更新 | Main | PostgreSQLのコマンドラインクライアントpsql »
Comments