詳解Android動畫之Frame Animation 一點小細節

逐幀動畫能夠放置在/res下的anim或drawable目錄中。若是由徹底由編碼實現,咱們須要使用到AnimationDrawable對象。 java

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; android

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();
 }
} app

看似十分完美,跟官方文檔上寫的同樣,然而當咱們運行這個程序時會發現,它只停留在第一幀,並無出現咱們指望的動畫,什麼緣由呢?如何解決呢? ide

出現這種現象是由於當咱們在onCreate中調用AnimationDrawable的start方法時,窗口Window對象尚未徹底初始化,AnimationDrawable不能徹底追加到窗口Window對象中,那麼該怎麼辦呢?咱們須要把這段代碼放在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);
//	}
}

運行一下,動畫就能夠正常顯示了。 this

代碼下載:http://download.csdn.net/detail/mwq384807683/5963973 編碼

相關文章
相關標籤/搜索