Android动画之二:Frame Animation(帧动画)示例详解

0 摘要

接上一篇博客Android动画之一:Tween Animation(补间动画)示例详解,我们继续学习下 Frame Animation(帧动画) 的特点及使用。

1 Frame Animation简介

Frame Animation(帧动画、逐帧动画),又叫做Drawable Animation(绘图动画),它是一系列图片按照一定顺序展示的过程,和放幻灯片相似。它和补间动画一样,实际上也属于View Animation(视图动画),可以用编码实现,也可以定义在Xml中。下面介绍下这两种方式的实现过程及效果。

2 Frame Animation实现方式

2.1 代码方式

不管哪种方式实现帧动画,都需要我们事先把图片准备好。因此,我们需要将图片放入drawable文件夹(根据名字也可以猜到放在哪了),然后就可以写代码实现帧动画了。
第一步,把冰箱门打开,错了,是获取一个AnimationDrawable实例并为其添加每一帧动画图片,将其设置为ImageView的背景,在Activity onCreate()的时候你就可以做这件事了。

    /**
     * 1 通过代码添加帧动画
     */
    private void initAnimationDrawable1() {
   
        // 创建AnimationDrawable实例
        mAnimationDrawable = new AnimationDrawable();

        // 为AnimationDrawable实例添加每一帧动画(这里投机取巧了,可能会有问题)
        int startDrawableId = R.drawable.img00;
        for (int i = 0; i < 25; i++) {
   
            mAnimationDrawable.addFrame(getResources().getDrawable(startDrawableId + i), 50);
        }

        // 设置成循环播放
        mAnimationDrawable.setOneShot(false);
        mImageView.setBackground(mAnimationDrawable);

    }

第二步,可以在点击播放按钮的时候去播放动画了,划重点mAnimationDrawable.start(),不好意思划错了

   /**
     * 播放帧动画
     */
    public void playAnimation(View view) {
   
        // 解决点击播放完成后再次点击不播放动画的问题
        if (mAnimationDrawable != null) {
   
            long animTotalDuration = (long) getFrameAnimTotalDuration(mAnimationDrawable);
            long elapseTime = System.currentTimeMillis() - mAnimationLastStartTime;
            if (elapseTime > animTotalDuration && mAnimationDrawable.isRunning()) {
   
                mAnimationDrawable.stop();// 帧动画播放完成后必须调用stop() isRunning()才为false
            }
        } else {
   
            return;
        }

        if (!mAnimationDrawable.isRunning()) {
   
            Log.i(TAG, "playAnimation: start")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值