做为 Android 最多见的两种动画形式,逐帧动画( Drawable 动画),有着极其普遍的应用,它的原理与早起的电影以及 GIF 相似,就是把一张的图,按顺序快速切换,这样一来看上去就好像会动同样。android
你们明显能够看到这是一个动图,可是它并不是一个 GIF 它是由八张单独的图片,间隔 200ms 连续播放所实现的效果。git
这里我给你们介绍两种实现方法github
在代码中添加顾名思义,就是将要播放的图片集合,一张一张的添加到一个 AnimationDrawable 对象中去,接着再将其添加到 imageView 中,调用 start() 方法便能开始播放。bash
注意:这里有个 OneShot() 方法,该方法用于设置是否须要循环播放,true为仅播放一次,false 为连续的循环播放。动画
imageView_2 = findViewById(R.id.image_2);
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();复制代码
方法一有一个很严重的缺陷,就是每次要给控件添加这个动画时,都须要从新一步步的添加,可是有的时候,一套动画,咱们可能须要在不少地方反复的使用到。spa
这时若是咱们采用,将动画封装在一个资源文件中,在须要使用的时候可以像添加背景图同样简单的添加它:指针
<?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>
复制代码
imageView_1 = findViewById(R.id.image_1);
imageView_1.setImageResource(R.drawable.abunation_list);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView_1.getDrawable();
animationDrawable.start();复制代码
在使用帧动画时,这里有几个要点须要你们记住:code
其1、在个人范例代码中,你们能够看到,是直接在 imageView 对象执行过 findViewById 后就添加了的,可是这样会致使一个严重的问题,对于一些手机而言,若是 onCreate 方法没有执行完,imageView 对象就不会真正的实例化出来,这就到致使空指针异常(NullPointException)。正确的使用方法,根据活动的运行周期,咱们应该在 onResume 方法中添加它,这样就保证了全部的控件都被实例化出来,cdn
其2、对与帧动画,咱们不建议添加太大的图片,由于这很容易致使 OOM,建议你们用 Drawable 动画,去作一些相似,加载动画,WiFi 连接动画这样,占有内存比较小的操做。xml
因为以上都是我本身的理解,若是有误,欢迎你们在评论区留言,谢谢 🙏