解决Android帧动画在Oncreate中启动只显示第一帧

做了个简单的帧动画,在onCreate方法中start,发现只能看到第一帧

<?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/fire01"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire02"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire03"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire04"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire05"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire06"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire07"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire08"
        android:duration="200"/>
    <item
        android:drawable="@drawable/fire09"
        android:duration="200"/>

</animation-list>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
	>
	<ImageView
        android:id="@+id/fire_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/fire_anim" />
</RelativeLayout>
ImageView fireImg = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ImageView fireImg = (ImageView) findViewById(R.id.fire_img);
		final AnimationDrawable animDrawable = (AnimationDrawable) fireImg
				.getBackground();
		animDrawable.start();
	}

stackoverflow上发现一个解决办法

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		ImageView fireImg = (ImageView) findViewById(R.id.fire_img);
		final AnimationDrawable animDrawable = (AnimationDrawable) fireImg
				.getBackground();
		fireImg.post(new Runnable() {
			@Override
			public void run() {
				animDrawable.start();
			}
		});
	}

或者在Activity中的onWindowFocusChanged方法中start

@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		super.onWindowFocusChanged(hasFocus);
		if (fireImg != null) {
			AnimationDrawable animDrawable = (AnimationDrawable) fireImg
					.getBackground();
			animDrawable.start();
		}
	}

相关推荐