• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android动画解析(一)—— Frame Animation(帧动画)

Android动画解析(一)—— Frame Animation(帧动画)

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了frame animation,key frame animation,cancelanimationframe,android animation,android中animation等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android动画解析(一)—— Frame Animation(帧动画)


动画在我们实际开发中占有很重要的地位,一个优秀的动画能为我们的app应用增色很多,同时一个优秀的动画衔接能够增加我们app的逻辑展示。在Android系统中,系统给我们提供了几种动画的支持,分别是Frame Animation(帧动画)、Tween Animation(补间动画)以及3.0系统以后增加的Property Animator(属性动画)。这些动画的熟练使用可以帮助我们设计出perfect效果的动画,下面就开始我们的学习吧!

一、概述
  帧动画,顾名思义就是这个动画的效果是由一帧帧的图片组合出来的。通过制定图片展示的顺序,达到动画的展示效果。

  在Android开发中,系统给我们提供了”animation-list” 节点用于我们配置帧动画。

实现步骤

1、在res目录下创建用于存储xml动画文件的anim文件夹,res/anim,也可以放在drawable目录下

这里写图片描述

2、动画配置,在animation-list节点中配置item项
f2

2、将文件设置到ImageView控件的背景上,然后获取背景转换为AnimationDrawable对象进行播放动画

    iv_imageView.setBackgroundResource(R.drawable.frame_animation);
    AnimationDrawable animation = (AnimationDrawable)iv_imageView.getBackground();
    animation.start();

二、实例讲解

1、奔跑的飞马
  我们先来看下效果图,第一个实例,飞奔的飞马。
waking

  对于这种动画效果使用Frame Animation动画即可完成,我们只需要将gif动画进行分帧切割成图片,然后我们在animation-list标签中指定图片的顺序进行播放即可。

代码实现

<code class=" hljs xml"><animation-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@mipmap/Horse_start" android:duration="200">
        <item android:drawable="@mipmap/Horse1" android:duration="200">
        <item android:drawable="@mipmap/Horse2" android:duration="200">
        <item android:drawable="@mipmap/Horse3" android:duration="200">
        <item android:drawable="@mipmap/Horse4" android:duration="200">
        <item android:drawable="@mipmap/Horse5" android:duration="200">
        <item android:drawable="@mipmap/Horse6" android:duration="200">
        <item android:drawable="@mipmap/Horse7" android:duration="200">
        <item android:drawable="@mipmap/Horse8" android:duration="200">
        <item android:drawable="@mipmap/Horse_start" android:duration="200">
    </item></item></item></item></item></item></item></item></item></item></animation-list></code>

在animation-list中,item的先后顺序就是图片在动画中播放的顺序。顺序设置好了以后,我们就将该anim绑定到我们的ImageView上,然后进行播放。

    

最后就是我们的代码,获取到该drawable,然后进行播放。

    ImageView iv_animaView = (ImageView) findViewById(R.id.iv_frame);
    AnimationDrawable animationDrawable = (AnimationDrawable) iv_animaView.getBackground();
    animationDrawable.start();

看下动画效果:
run

是不是很简单,简单的几行代码就可以做出一个gif的动画效果,不过现在貌似有开源控件可以加载gif图片,回头研究下看看二者的效率如何。

2、裸奔的机器人
  通过前面的一个案例,我们已经基本熟悉了Frame Animation的使用,下面我们在做一个例子,来巩固下知识点。
这里写图片描述

代码实现

<code class=" hljs xml"><animation-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@mipmap/zzlx1" android:duration="200">
        <item android:drawable="@mipmap/zzlx2" android:duration="200">
        <item android:drawable="@mipmap/zzlx3" android:duration="200">
        <item android:drawable="@mipmap/zzlx4" android:duration="200">
        <item android:drawable="@mipmap/zzlx5" android:duration="200">
        <item android:drawable="@mipmap/zzlx6" android:duration="200">
        <item android:drawable="@mipmap/zzlx7" android:duration="200">
        <item android:drawable="@mipmap/zzlx8" android:duration="200">
    </item></item></item></item></item></item></item></item></animation-list></code>

后面的代码同上面,我们只需要看看我们的实现效果即可。

这里写图片描述

三、帧动画原理分析
  在上面的开发中,我们在将backgroud对应的Drawable对象转换为一个AnimationDrawable对象,然后由这个对象启动Frame动画,那么这个类究竟是由何方神圣呢?让我们一起look look。

1、AnimationDrawable概述
  AnimationDrawable用于创建frame-by-frame(逐帧)动画,它定义了一些列的Drawable对象可用于设置View的backgroud背景属性。frame-by-frame动画最简单的方式是通过XML文件进行创建,然后将xml文件放到res/drawable/folder文件夹下,同时将此drawa对象设置到view的backgroud属性。Xml文件的组成:

animation-list:根节点,包含一系列的item item:每个item对应一个frame(帧)

下面是在代码中创建和使用帧动画:

    ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image);
    img.setBackgroundResource(R.drawable.spin_animation);
    AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
    frameAnimation.start();

我们在来看看AnimationDrawable对象给我们提供的属性。

AnimationDrawable_visible:设置是否可见 AnimationDrawable_variablePadding: AnimationDrawable_oneshot:设置是否只播放一次,true是,false否 AnimationDrawableItem_duration:设置每帧动画之间的时间间隔 AnimationDrawableItem_drawable:设置每帧之间间隔的drawable对象

2、AnimationDrawable源码分析
  上面我们已经对AnimationDrawable进行了一个简要的分析,了解了一些它的属性,我们心中获取对帧动画还有一些疑惑,比如一些问题:

AnimationDrawable是如何形成一个个帧画面? Frame Animation是如何实现不断循环播放? 我们能否通过代码控制Frame动画的播放?

下面我们就围绕上面的几个问题对AnimationdDrawable进行分析。查看源码,我们可以看到AnimationDrawable暴露的public方法。
mthod

  AnimationDrawable根据名称,我们也能推算到这是一个Drawable的子类,我们仔细一想,为什么通过getBackgroud()方法获得的Drawable对象可以转换到AnimationDrawable这个子类呢?这就需要我们去看下源码。在Drawable类中,有一个方法createFromXml()方法:<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> /** * Create a drawable from an XML document. For more information on how to * create resources in XML, see * Drawable Resources. */ public static Drawable createFromXml(Resources r, XmlPullParser parser) throws XmlPullParserException, IOException { return createFromXml(r, parser, null); }

这个方法就是用于将我的XML文件转换成

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android动画解析(一)—— Frame Animation(帧动画)

相关文章

  • 2017-05-26Android横竖屏切换小结,Android屏切换小结
  • 2017-05-26系统重启后ngix reload不生效原因分析
  • 2017-05-26tomcat+java的web程序持续占cpu问题调试
  • 2018-01-28TiemPicke 和 DatePicker控件 自定义大小
  • 2017-05-26Android基础部分再学习---activity的生命周期
  • 2017-05-26Android学习--RelativeLayout相对布局
  • 2017-05-26依赖ConstraintLayout报错,Could not find *****,Failed to resolve:*****,constraintlayout
  • 2017-05-26Android面试题(3),android面试题
  • 2017-05-26Charles Proxy 4.1.2 破解版,charles4.1.2
  • 2017-05-26EventBus通信小能手,EventBus通信能手

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓开源项目周报0411,安卓开源项目0411
    • Unity实现滑页嵌套(解决ScrollRect嵌套冲突问题)
    • Android Studio 2.0下创建jni应用调用本地C函数
    • Android studio环境搭建,androidstudio搭建
    • getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
    • Android,androidstudio
    • 安卓GreenDao框架一些进阶用法整理,安卓greendao
    • svn环境搭建(不同目录、设置不同的权限)
    • linux 内存性能调优
    • Android之SQLite数据库篇,androidsqlite

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有