详解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 编码

相关文章
相关标签/搜索