AndroidアニメのFrame Animationの詳細

2631 ワード

フレームごとのアニメーションは、/resのanimディレクトリまたはdrawableディレクトリに配置できます.完全にエンコーディングによって実装される場合は、AnimationDrawableオブジェクトを使用する必要があります.
import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.ImageView;
public class FrameActivity extends Activity {    private ImageView image;    @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.frame);   image = (ImageView) findViewById(R.id.frame_image);      image.setBackgroundResource(R.anim.frame);   AnimationDrawable anim = (AnimationDrawable) image.getBackground();   anim.start();  } }
完璧に見えますが、公式ドキュメントに書かれているように見えますが、このプログラムを実行すると、最初のフレームにとどまり、私たちが望んでいるアニメーションが現れていないことがわかります.なぜですか.どのように解決しますか?
この現象は、onCreateでAnimationDrawableのstartメソッドを呼び出すと、ウィンドウウィンドウウィンドウオブジェクトが完全に初期化されておらず、AnimationDrawableがウィンドウウィンドウウィンドウウィンドウウィンドウオブジェクトに完全に追加できないため、どうすればいいのでしょうか.このコードをonWindowFocusChangedメソッドに配置する必要があります.Activityがユーザーに表示されると、onWindowFocusChangedメソッドが呼び出されます.私たちはこのときにアニメーション効果を実現します.もちろん、onWindowFocusChangedはonCreateの後に呼び出されます.
package com.itheima;

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

@SuppressWarnings("unused")
public class FrameAnimation1Activity extends Activity {
	private ImageView iv ;
    private AnimationDrawable drawable;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        iv = (ImageView) this.findViewById(R.id.frame_image);
//        iv.setBackgroundResource(R.drawable.list);
//        drawable = (AnimationDrawable) iv.getBackground();
    }
    
    @Override
	public void onWindowFocusChanged(boolean hasFocus) {
		super.onWindowFocusChanged(hasFocus);
		iv.setBackgroundResource(R.drawable.list);
		AnimationDrawable anim = (AnimationDrawable) iv.getBackground();
		anim.start();
	}
//	@Override
//	public boolean onTouchEvent(MotionEvent event) {
//		if(event.getAction()==MotionEvent.ACTION_DOWN){
//			// 
//			drawable.start();
//		
//		}
//		return super.onTouchEvent(event);
//	}
}

実行すると、アニメーションが正常に表示されます.
コードのダウンロード:http://download.csdn.net/detail/mwq384807683/5963973