我正在尝试在android中执行逐帧动画。为此,我创建了一个名为“anim.xml”的xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/square0" android:duration="100" />
<item android:drawable="@drawable/square1" android:duration="100" />
<item android:drawable="@drawable/square2" android:duration="100" />
<item android:drawable="@drawable/square3" android:duration="100" />
<item android:drawable="@drawable/square4" android:duration="100" />
<item android:drawable="@drawable/square5" android:duration="100" />
</animation-list>
然后在我定义的帧布局中,我尝试将其设置为背景并在onCreate中启动它,如下所示:
FrameLayout imgView = (FrameLayout)findViewById(R.id.frameLayout1);
imgView.setBackgroundResource(R.drawable.anim);
AnimationDrawable anim = (AnimationDrawable) imgView.getBackground();
anim.start();
我所遇到的只是第一帧,但我想要的是一个正方形的动画。你对我做错了什么有任何意见吗?
干杯。
答案 0 :(得分:4)
对我来说,Matt的解决方案对于这种情况似乎有点过分了。您只需将start()
方法的调用移至onWindowFocusChanged()
方法,因为此时AnimationDrawable
完全附加到窗口并且实际上可以启动。像这样:
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
anim.start();
}
在onCreate()
方法中执行所有其他操作,并使AnimationDrawable
成为类变量,以便您可以从onWindowFocusChanged()
方法访问它。
答案 1 :(得分:1)
我在尝试在onCreate方法中启动动画时遇到过问题。尝试用以下内容重新描述你的最后一行:
imgView.post(new Runnable()
{
@Override
public void run()
{
anim.start();
}
});
这将在onCreate执行完毕后立即启动动画。