Hatena::Groupandroid

lnzntの Android 日記 このページをアンテナに追加 RSSフィード

2012年04月15日(日)

Drawable Animation

16:19 | Drawable Animation - lnzntの Android 日記 を含むブックマーク はてなブックマーク - Drawable Animation - lnzntの Android 日記 Drawable Animation - lnzntの Android 日記 のブックマークコメント

上の文書に書かれている Drawable Animation を書いてみました。

Tweened Animation は 1コマずつの画像を連続表示して実現したアニメーションみたいです。

f:id:lnznt:20120415160749j:image

実装

上の文書の例のとおり真似しました。

画像は GIMP で適当につくりました。

res/drawable/animation.xml (アニメーションの定義。res/drawable に置く)

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/count03" android:duration="1000" />
    <item android:drawable="@drawable/count02" android:duration="1000" />
    <item android:drawable="@drawable/count01" android:duration="1000" />
    <item android:drawable="@drawable/count00" android:duration="1000" />
</animation-list>

以下の画像を res/drawable-hdpi に置きます。

f:id:lnznt:20120415160753p:image

count03.png

f:id:lnznt:20120415160752p:image

count02.png

f:id:lnznt:20120415160751p:image

count01.png

f:id:lnznt:20120415160750p:image

count00.png

res/layout/main.xml

(ImageView の android:src は設定しない。アニメーションにかぶさって見えなくなってしまうので)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/anim_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/anim_view_description"/>

    <Button
        android:id="@+id/start_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/start_button_label" android:onClick="onStartAnim"/>

    <Button
        android:id="@+id/stop_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/stop_button_label" android:onClick="onStopAnim"/>

</LinearLayout>

res/values/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, AnimSampleActivity!</string>
    <string name="app_name">AnimSample</string>
    <string name="start_button_label">Start</string>
    <string name="stop_button_label">Stop</string>
    <string name="anim_view_description">Anime View</string>
</resources>

src/.../DrawableAnimSampleActivity .java

package com.example.drawableanimsample;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class DrawableAnimSampleActivity extends Activity {
	AnimationDrawable animation;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ImageView animImage = (ImageView) findViewById(R.id.anim_view);
        animImage.setBackgroundResource(R.drawable.animation);
        animation = (AnimationDrawable) animImage.getBackground();
    }
    
    public void onStartAnim(View v) {
    	animation.start();
    }
    
    public void onStopAnim(View v) {
    	animation.stop();
    }
}