0

我想从 14 个 png 图像创建动画 drawable。我将 14 个图像添加到所有可绘制文件夹中,并创建了一个如下所示的动画列表,但没有出现,这是什么问题?

圈子.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>

爪哇代码:

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

可能还有第三个原因。

第一个原因是OutOfMemoryError。您需要压缩图像。

解决方案

第二个原因是你的 circle.xml 中的android:oneshot参数。该动画仅运行 14 帧。通过将列表的 android:oneshot 属性设置为 true,它将只循环一次然后停止并保持在最后一帧。如果设置为 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">

第三个原因是在 Activity 的 onCreate() 方法期间无法调用 AnimationDrawable 上调用的start()方法,因为 AnimationDrawable 尚未完全附加到窗口。

使用以下代码更改您的 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 回答
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 回答