逐帧动画(Frame Animation)

逐帧动画(Frame Animation)

逐帧动画也叫Drawable Animation,它利用人眼的视觉暂留效应--光对视网膜产生的视觉在光停止作用后,仍保留一段时间的现象。
逐帧动画:指定动画中的每一帧对应的图片和持续的时间,然后就可以播放动画了。

定义逐帧动画——xml资源文件方式

首先将每一帧的图片放到res/drawable目录

逐帧动画(Frame Animation)_第1张图片
Paste_Image.png

res/anim目录中建一个动画xml文件 根节点animation-list




    

    

android:oneshot 用来控制是否循环播放
android:duration 播放每一帧持续的时间
代码中创建

        AnimationDrawable animationDrawable = new AnimationDrawable();
        for (int i = 0; i < 5; i++) {
            int id = getResources().getIdentifier("" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            animationDrawable.addFrame(drawable,120);
        }
        imageView.setBackgroundDrawable(animationDrawable);
        animationDrawable.setOneShot(fa

View载体执行动画

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // [1]找到ImageView 来执行我们的动画
        ImageView imageView = (ImageView) findViewById(R.id.iv);

        // [2] setBackgroundResource设置rocketImage 背景资源 (资源就是我们刚刚在drawable下定义的动画)
        imageView.setBackgroundResource(R.drawable.my_anim);
        // [3] getBackground()获取刚刚设置背景资源(动画)
        AnimationDrawable rocketAnimation = (AnimationDrawable) imageView
                .getBackground();
    }

    public void startAnimation(View view) {// 点击按钮调用此方法
        if (rocketAnimation.isRunning()) {
            //停止动画
            rocketAnimation.stop();
        }
        //开始动画
        rocketAnimation.start();
    }
}

注意:
 在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次。
 最后一点是SDK中提到的,不要在onCreate中调用start,因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在onWindowFoucsChanged()中调用start()。

你可能感兴趣的:(逐帧动画(Frame Animation))