0

14個のpng画像からアニメーションのドローアブルを作成したいと思います。14枚の画像をすべてのdrawable-foldersに追加し、以下のようなアニメーションリストを作成しましたが、何も表示されません。何が問題なのでしょうか。

circle.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/f1" android:duration="50" />
    <item android:drawable="@drawable/f2" android:duration="50" />
    <item android:drawable="@drawable/f3" android:duration="50" />
    <item android:drawable="@drawable/f4" android:duration="50" />
    <item android:drawable="@drawable/f5" android:duration="50" />
    <item android:drawable="@drawable/f6" android:duration="50" />
    <item android:drawable="@drawable/f7" android:duration="50" />
    <item android:drawable="@drawable/f8" android:duration="50" />
    <item android:drawable="@drawable/f9" android:duration="50" />
    <item android:drawable="@drawable/f10" android:duration="50" />
    <item android:drawable="@drawable/f11" android:duration="50" />
    <item android:drawable="@drawable/f12" android:duration="50" />
    <item android:drawable="@drawable/f13" android:duration="50" />
    <item android:drawable="@drawable/f14" android:duration="50" />
</animation-list>

レイアウトxml:

<?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" >

    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start" />

    <ImageView
        android:id="@+id/imgCircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Javaコード:

package pit.opensource.animation;

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

public class CircleAnimationActivity extends Activity {
    /** Called when the activity is first created. */
    Button btnStart;
    ImageView imgCircle;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnStart = (Button)findViewById(R.id.btnStart);
        imgCircle = (ImageView) findViewById(R.id.imgCircle);
        imgCircle.setBackgroundResource(R.drawable.circle);

        AnimationDrawable ani = (AnimationDrawable) imgCircle.getBackground();
        ani.start();
        btnStart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //  ani.start();

            }
        });

    }
}
4

2 に答える 2

0

背景はアニメーションである必要があります。circle.xmlをres/animに配置し、変更する必要があります

imgCircle.setBackgroundResource(R.drawable.circle);

imgCircle.setBackgroundResource(R.anim.circle);

次のコードを試して、アニメーションを開始してください

   imgCircle.post(new Runnable() {
        @Override
        public void run() {
            AnimationDrawable ani = (AnimationDrawable) imgCircle.getBackground();
            ani.start();
        }
    });

または、アニメーションの開始をonWindowFocusChangedに移動するように実装します

public void onWindowFocusChanged(boolean flag) {
    super.onWindowFocusChanged(flag);
    AnimationDrawable anim = (AnimationDrawable) imgCircle.getBackground();
    anim.start();
}
于 2012-05-04T09:19:36.550 に答える
0

3番目の理由が考えられます。

最初の理由はOutOfMemoryErrorです。画像を圧縮する必要があります。

解決

2番目の理由は、circle.xmlのandroid:oneshotパラメーターです。このアニメーションはわずか14フレームで実行されます。リストのandroid:oneshot属性をtrueに設定すると、1回だけ循環し、最後のフレームで停止して保持されます。falseに設定すると、アニメーションがループします。

変化する

<animation-list xmlns:android="http://schemas.android.com/apk/res/android">

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">

3番目の理由は、AnimationDrawableがまだウィンドウに完全にアタッチされていないため、アクティビティのonCreate()メソッド中にAnimationDrawableで呼び出されるstart()メソッドを呼び出すことができないことです。

次のコードでMainActivity.javaを変更します。

package pit.opensource.animation;

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

public class CircleAnimationActivity extends Activity {

    Button btnStart;
    ImageView imgCircle;
    AnimationDrawable ani;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        imgCircle = (ImageView) findViewById(R.id.imgCircle);
        imgCircle.setBackgroundResource(R.drawable.circle);

        ani = (AnimationDrawable) imgCircle.getBackground();

        addListenerOnButton();
    }

    public void addListenerOnButton() {

        btnStart = (Button)findViewById(R.id.btnStart);

        btnStart.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                ani.start();

            }

        });

    }

}
于 2013-12-17T09:50:00.830 に答える