天啦噜!原来Android帧动画这么简单

帧动画有着极其广泛的应用,也非常容易理解,其实就是简单的由N张静态图片收集起来,然后我们通过控制依次显示这些图片,因为人眼"视觉残留"的原因,会让我们造成动画的"错觉",跟放电影的原理一样!Android中展示这种形式一般有两种方式,一种用AnimationDrawable实现,另外一种直接引用GIF实现。本文就给阐述一下如何通过AnimationDrawable实现帧动画。

Android动画系列:

帧动画本质

将动画拆分为 的形式,且定义每一帧 = 每一张图片,然后按序播放一组预先定义好的图片。

准备工作

既然是帧动画肯定需要一组图片,类似幻灯片一样,我们把每一张图片定义一个专属“组”内特定的名字,然后将这组图片资源放到drawable中。

实现方式

这里我给大家介绍两种实现方法:

  • 在XML中定义然后代码中调用
  • 直接在代码中定义调用

其中xml创建的xml动画文件要放在res/drawable/目录下。

在XML中定义然后代码中调用

1.在 /res/drawable 文件夹下建立一个名为 abunation_list.xml 的文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item
        android:drawable="@drawable/iron_1"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_2"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_3"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_4"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_5"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_6"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_7"
        android:duration="200"/>
    <item
        android:drawable="@drawable/iron_8"
        android:duration="200"/>
</animation-list>

其中oneshot属性,用于设置是否需要循环播放,true为仅播放一次,false 为连续的循环播放。

2.将其添加到ImageView中并启动动画

imageView = findViewById(R.id.image);
imageView.setImageResource(R.drawable.abunation_list);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();

直接在代码中定义调用

在代码中添加顾名思义,就是将要播放的图片集合,一张一张的添加到一个 AnimationDrawable 对象中去,接着再将其添加到 imageView 中,调用 start() 方法便能开始播放。AnimationDrawable同样也有一个OneShot()方法,用于设置是否需要循环播放。

imageView = findViewById(R.id.image);
AnimationDrawable animationDrawable1 = new AnimationDrawable();
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_1 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_2 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_3 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_4 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_5 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_6 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_7 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_8 ),200);
animationDrawable1.setOneShot(true);
imageView_2.setImageDrawable(animationDrawable1);
animationDrawable1.start();

总结

Android帧动画相对简单一些,开发过程中可能有多个地方使用相同的帧动画,建议采用XML定义的形式去实现,可用于文件共享,当然也可以通过代码进行封装,另外如果动画相对比较复杂,可以采用GIF加载更简单一些。无论是通过一组图片定义的帧动画还是GIF引入都需要注意内存哦,可通过一些手段进行压缩处理一下。

最后

我是i猩人,总结不易,转载注明出处,喜欢本篇文章的童鞋欢迎点赞、关注哦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值