内容简介:作为 Android 最常见的两种动画形式,逐帧动画( Drawable 动画),有着极其广泛的应用,它的原理与早起的电影以及 GIF 类似,就是把一张的图,按顺序快速切换,这样一来看上去就好像会动一样。大家明显可以看到这是一个动图,但是它并非一个 GIF 它是由八张单独的图片,间隔 200ms 连续播放所实现的效果。
前言
作为 Android 最常见的两种动画形式,逐帧动画( Drawable 动画),有着极其广泛的应用,它的原理与早起的电影以及 GIF 类似,就是把一张的图,按顺序快速切换,这样一来看上去就好像会动一样。
实例,大家先看看效果
大家明显可以看到这是一个动图,但是它并非一个 GIF 它是由八张单独的图片,间隔 200ms 连续播放所实现的效果。
实现方法
这里我给大家介绍两种实现方法
- 在活动代码中添加实现
- 先生成 animation-list 的资源文件,再在活动中引用。
在代码中添加
在代码中添加顾名思义,就是将要播放的图片集合,一张一张的添加到一个 AnimationDrawable 对象中去,接着再将其添加到 imageView 中,调用 start() 方法便能开始播放。
注意:这里有个 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();复制代码
引用资源文件方法
方法一有一个很严重的缺陷,就是每次要给控件添加这个动画时,都需要重新一步步的添加,但是有的时候,一套动画,我们可能需要在很多地方反复的使用到。
这时如果我们采用,将动画封装在一个资源文件中,在需要使用的时候能够像添加背景图一样简单的添加它:
步骤
- 在 /res/drawable 文件夹下建立一个名为 abunation_list.xml 的文件
- 在活动代码中,像添加图片资源一样的,为控件添加它
- 通过 getDrawable 方法,重空间中获得它并添加给 AnimationDrawable 对象
- 调用 start 方法开启动画
建立资源文件如下
<?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 中
imageView_1 = findViewById(R.id.image_1); imageView_1.setImageResource(R.drawable.abunation_list); AnimationDrawable animationDrawable = (AnimationDrawable) imageView_1.getDrawable(); animationDrawable.start();复制代码
注意事项
在使用帧动画时,这里有几个要点需要大家记住:
其一、 在我的范例代码中,大家可以看到,是直接在 imageView 对象执行过 findViewById 后就添加了的,但是这样会导致一个严重的问题,对于一些手机而言,如果 onCreate 方法没有执行完,imageView 对象就不会真正的实例化出来,这就到导致空指针异常(NullPointException)。正确的使用方法,根据活动的运行周期,我们应该在 onResume 方法中添加它,这样就保证了所有的控件都被实例化出来,
其二、 对与帧动画,我们不建议添加太大的图片,因为这很容易导致 OOM,建议大家用 Drawable 动画,去做一些类似,加载动画,WiFi 链接动画这样,占有内存比较小的操作。
项目 Demo :
点击跳转
由于以上都是我自己的理解,如果有误,欢迎大家在评论区留言,谢谢 :pray:
以上所述就是小编给大家介绍的《Android 逐帧动画( Drawable 动画),这一篇就够了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【Android 动画】动画详解之属性动画(三)
- 【Android 动画】动画详解之属性动画(五)
- Flutter 动画全解析(动画四要素、动画组件、隐式动画组件原理等)
- 【Android 动画】动画详解之补间动画(一)
- 系统学习iOS动画之一:视图动画
- 初识属性动画——使用Animator创建动画
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ActionScript 3.0精彩范例词典
杨东昱 编 / 2008-5 / 59.00元
《ActionScript 3.0精彩范例词典》列出了最常用的ActionScript语法,并附有详细的程序代码范例,不但教您如何使用、修改ActionScript代码,而且还以实际范例和图解,说明每项语法还能呈现哪些动画效果和功能,对学习ActipScript有所帮助。读者在阅读《ActionScript 3.0精彩范例词典》之后,将能开发出属于自己的ActionScript程序与FLASH动画......一起来看看 《ActionScript 3.0精彩范例词典》 这本书的介绍吧!