My Photo

« Android SDK tools, Revision 21 に更新 | Main | PostgreSQLのコマンドラインクライアントpsql »

November 18, 2012

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 »

Androidアプリ開発」カテゴリの記事

「Java」カテゴリの記事

プログラミング、技術情報」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/56141079

Listed below are links to weblogs that reference Androidアプリ開発メモ068:Tweenアニメーション:

« Android SDK tools, Revision 21 に更新 | Main | PostgreSQLのコマンドラインクライアントpsql »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof