动画入门和进阶文章列表:

Animation动画概述和执行原理
Android动画之补间动画TweenAnimation
Android动画之逐帧动画FrameAnimation
Android动画之插值器简介和系统默认插值器
Android动画之插值器Interpolator自定义
Android动画之视图动画的缺点和属性动画的引入
Android动画之ValueAnimator用法和自定义估值器
Android动画之ObjectAnimator实现补间动画和ObjectAnimator自定义属性
Android动画之ObjectAnimator中ofXX函数全解析-自定义Property,TypeConverter,TypeEvaluator
Android动画之AnimatorSet联合动画用法
Android动画之LayoutTransition布局动画
Android动画之共享元素动画
Android动画之ViewPropertyAnimator(专用于view的属性动画)
Android动画之Activity切换动画overridePendingTransition实现和Theme Xml方式实现
Android动画之ActivityOptionsCompat概述
Android动画之场景变换Transition动画的使用
Android动画之Transition和TransitionManager使用
Android动画之圆形揭露动画Circular Reveal

1 逐帧动画介绍

视图动画由两部分组成,补间动画和逐帧动画,前面文章已经讲解了补间动画,下面讲解逐帧动画。
Frame-by-frame Animation主要作用于view,可以利用xml或者代码生成动画,如果使用xml方式生成动画需要在res/drawable 目录下创建动画xml文件(animation-list)。

逐帧动画的原理是一张一张的播放图片资源(drawable资源),然后出现动画效果。

逐帧动画对应的类是AnimationDrawable,在android.graphics.drawable.Drawable包名下。

逐帧动画使用方式:把逐帧动画作为view的背景,然后获取动画,开启动画。

构造函数
AnimationDrawable()

属性说明:

  • oneshot:是否只播放一次,取值true,false,默认为false,用于animation-list
  • duration:每个item(每一帧动画)播放时长
  • drawable: 每一帧的drawable资源
  • visible:drawable资源是否可见,默认不可见

AnimationDrawable的主要函数:

  • addFrame(Drawable frame, int duration)添加drawable
    frame:每一帧的图片资源
    duration:每一帧的持续动画
  • start():开始动画
  • stop(): 结束动画
  • isRunning():是否正在执行
  • setOneShot(boolean oneShot):设置是否只播放一次
  • getNumberOfFrames() :获取帧的动画数

2 使用方式

2.1xml使用方式
首先定义animation-list 类型的drawable frameanimation.xml

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" >
// drawable= 图片资源;duration = 一帧持续时间(ms)
<item android:drawable="@drawable/d1" android:duration="1000"/>
<item android:drawable="@drawable/d2" android:duration="1000"/>
</animation-list>

设置动画资源的三种使用方式
第一种:
// 设置动画
imageView.setImageResource(R.drawable.frameanimation);
// 获取动画对象
animationDrawable = (AnimationDrawable)imageView.getDrawable();
animationDrawable.start();

第二种
设置背景:
imageView.setBackgroundResource(R.drawable.frameanimation);
animationDrawable = (AnimationDrawable) imageView.getBackground()
第三种
直接获取然后设置:
animationDrawable = (AnimationDrawable) getResources().getDrawable(
R.drawable.frameanimation);
imageView.setBackground(animationDrawable)

2.2代码使用方式
animationDrawable = new AnimationDrawable();
// 为AnimationDrawable添加动画帧
animationDrawable .addFrame(getResources().getDrawable(R.drawable.d1), 50);
imageView.setBackground(animationDrawable );

3 代码示例

3.1 xml实现方式

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false">
<item android:drawable="@drawable/compositedst1" android:duration="500"></item>
<item android:drawable="@drawable/compositedst2" android:duration="500"></item>
<item android:drawable="@drawable/compositedst3" android:duration="500"></item>
<item android:drawable="@drawable/compositedst4" android:duration="500"></item>
</animation-list>

3.2 代码获取设置

imageView = findViewById(R.id.imageview);
imageView.setImageResource(R.drawable.animationlist);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();

代码实现方式
和上面xml实现动画相同,就不在贴gif动画

AnimationDrawable animationDrawable = new AnimationDrawable();
animationDrawable.setOneShot(false);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.compositedst1),1000);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.compositedst2),1000);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.compositedst3),1000);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.compositedst4),1000);
imageView.setImageDrawable(animationDrawable);
animationDrawable.start();

注意:
内部使用图片作为资源,所以如果图片资源过大可能造成OOM,虽然简单,但是慎用。

Android动画之逐帧动画FrameAnimation相关推荐

  1. Android自定义控件:动画类---逐帧动画AnimationDrawable

    1:概述 Android动画包括View Animation(视图动画)和Property Animator(属性动画),而View Animation包括Tween Animation(补间动画)和 ...

  2. android仿微信红包动画,Android仿微信打开红包动画(逐帧动画)

    Frame Animation(逐帧动画): 逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样.和补间动画一样可以通过xml实现也可 ...

  3. 安卓动画全解:补间动画(视图动画)、布局动画、属性动画、逐帧动画。动画Animation属性、Alpha属性、Scale属性、Translate属性、Rotate属性,动画集AnimationSet

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓动画全解:补间动画(视图动画).布局动画.属性动画.逐帧动画. 主要内容包含:动画Animation属性.Alpha属性.Scale属性.Tran ...

  4. css动画帧动画效果,CSS3动画之逐帧动画

    什么是逐帧动画 要了解 CSS3 逐帧动画,首先要明确什么是逐帧动画. 看一下维基百科中的定义: 定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果. 简而言之 ...

  5. android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画

    1.三种动画的介绍 现在 Android 常用的动画有三种: 逐帧动画,补间动画和属性动画: FrameAnimation(逐帧动画):将多张图片组合起来进行播放,很多 App 的加载动画是采用这种方 ...

  6. Android 高级编程【6个实战案例(附源码):刮刮卡、补间动画、逐帧动画、Fragment、RecyclerView、下拉刷新】

    目   录 刮刮卡案例[ScratchCard] 结构图 activity_main.xml MainActivity.java 运行效果图 补间动画(Tween Animation) 逐帧动画(Fr ...

  7. android 张口逐帧动画,《Android 动画》逐帧动画

    关于 Android 的动画学习可以分为以下几个大类: 逐帧动画 补间动画(也说 View 动画) 属性动画 转场动画 这里注意,我只是从学习的角度分为了这四类:从面试的角度,只需要说前面三类,转场动 ...

  8. Android案例(逐帧动画和属性动画)

    1.实现效果 2.布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...

  9. Android动画学习之补间动画和逐帧动画,移动互联网app开发

    | fromXScale | 指定动画开始时X轴上的缩放系数 | 值为1.0表示不再变化 | | fromYScale | 指定动画开始时Y轴上的缩放系数 | 值为1.0表示不再变化 | | toXS ...

最新文章

  1. 英特尔详解5G将如何助力VR的未来发展
  2. Oracle中比较日期大小
  3. C/C++求职宝典21个重点笔记(常考笔试面试点)
  4. Swift - 获取、改变按钮的标题文本(UIButton点击切换title)
  5. graphpad如何加标注_咱也是有挖掘机加长臂的人了
  6. mysql 征途_MySQL数据库
  7. 使用SpringBoot+JPA报错Incorrect syntax near 'hibernate_sequence'
  8. ssis 循环导入数据_使用集成服务(SSIS)包从Amazon S3 SSIS存储桶导入数据
  9. 【优化算法】飞蛾优化算法 (MFO)【含Matlab源码 1081期】
  10. OpenCV学习笔记——图像平滑处理
  11. [SiFi]三体中英名词翻译chapter1-3
  12. 解决Bug:windows无法休眠/休眠只关闭屏幕
  13. 目标检测—基于Yolov3的目标检测项目实战(学习笔记)
  14. 使用.htaccess 开启gzip 缓存文件 网页 提高速度 和 .htaccess文件用法集锦
  15. 计算机考研落榜了怎么办,一位考研落榜者的自述:考研失败的原因
  16. Android手机主流屏幕分辨率有哪些?
  17. 鸿图霸业nbsp;谁与争锋
  18. 平面解析几何----过抛物线外一点和焦点的连线平分切点弦的两切点和焦点组成的角
  19. 如何快速读Paper
  20. ubuntu 修改开机启动项默认值

热门文章

  1. 英语口语261之每日十句口语
  2. android的cooipad手机,苹果COO库克:Android平板电脑是大号智能手机
  3. Unity Shader 变体处理与预加载流程
  4. 测试开发工程师的薪资上限究竟在哪?年薪50W都不是梦...
  5. 研发首款高精度双频北斗芯片,「华大北斗」获数亿元人民币A轮融资
  6. 航空专家:中国北斗系统与美国GPS相比存3大难点
  7. 广东未来科技:敢为人先 引领立体显示事业全真时代
  8. 关于 此证书的签发者无效 解决办法 (整理自 网络)
  9. php写入文本检查重复,PHP检测重复文本
  10. linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...