Animation总结

原创 2013年12月05日 16:34:49

Android提供了两类的Animation:

1. Property Animation——相关类在包android.animation中

2. View Animation——相关类在android.view.animation中,也即它是与视图相关的


View Animation又分了两类:

(1)Frame Animation——它相关的使用类是AnimationDrawable

我们只需要记住这是一个Drawable,它的使用与其它Drawable资源并没有多大的不同。当然AnimationDrawable也提供了相应的接口,我们可以在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/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
动画的启动是调用start()方法,注意这个方法的调用不能在onCreate()中,因为此时动画资源并没有完全加载到窗口,比较好的方法是放置在onWindowFocusChanged()中。


(2)Tween Animation——对一张图片实现的动画,比如缩放。

查看源码,我们就不难理解补间动画的定义和它的动画效果的实现方式。比如对其中的ScaleAnimation而言,缩放的效果是通过Matrix矩阵变换实现的,本质上来说,都是动态的对位图实行变换操作。这也就是为什么补间动画只有四种——AlphaAnimation,ScaleAnimation,TranslateAnimation和RotateAnimation,因为一张图片的矩阵变换也就此四种。


Animation抽象类是这四个类的基类,我们也可以模仿他们通过矩阵变换或其它操作位图的方式实现自己的补间动画,比如组合其中两种同时变化。


补间动画的基本使用格式如下:

这里我们只介绍XML格式。

首先,它的XML文件往往是作为一种单独的动画资源文件保存在res/anim/文件夹下的,也就是说,这个文件夹下对应的资源文件的对象都是Animation类的对象(理解多态和XML文件表示的也是类对象)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>
这里涉及到的一些属性资源的含义和使用方法都可以通过API查到,这里不作介绍。唯一可能有点难度的是interpolator这个属性,我们后面再做介绍。

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
在代码中通过调用AnimationUtils.loadAnimation()装载这个动画资源,然后调用startAnimation启动动画。


Property Animation

View Animation针对的使用对象都是View,而Property Animation针对的使用对象则是所有对象,明白了这一点就知道了二者的差别。

这里我们先不探讨它的实现原理,而只是作一个总结性的了解它的使用。

属性动画的基类是Animator.java,在XML中,它也是一种动画资源。与视图动画相区别,它的xml文件保存在res/animator/文件夹中:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>
这里使用的对象节点就是具体的Animator子类对象名称。

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.anim.property_animator);
set.setTarget(myObject);
set.start();
上面的调用是启动属性动画的方法。


上面就简单总结了视图动画和属性动画的定义和使用方法,其中视图动画的使用对象针对的是View视图,属性对话的使用对象则是所有Object。

视图动画又分为两种,其一是桢动画,它可以当作一个完全的Drawable资源实现;其二是补间动画,它是通过矩阵变化等方法操作位图实现的,因此补间动画也是针对单一位图的动画。


android中的动画完全总结

这里会讲到的动画有视图动画(帧动画,补间动画),属性动画,activity和fragment切换时的动画,viewgroup添加和移除子view时的动画,android随后新的系统api的transi...
  • baidu_26994091
  • baidu_26994091
  • 2016年06月14日 21:59
  • 1370

Unity3D之Legacy动画系统学习笔记

Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统。目前的情况是Mecanim与Legacy两套动画系统同时...
  • cbbbc
  • cbbbc
  • 2017年03月06日 17:38
  • 139

css3 animation动画对应属性解释

CSS3动画,animation参数解释
  • jyy_12
  • jyy_12
  • 2015年03月01日 22:08
  • 18736

Animator与Animation之间的互转

Legacy Animation Can’t Animate Material Property 问题描述 使用Animator可以控制材质的属性,但是Animator的初始化比较耗CPU...
  • e295166319
  • e295166319
  • 2016年09月17日 16:53
  • 1549

Animation和Animator的简单区别

本篇博客主要介绍了视图动画和属性动画的区别和差异
  • u011043551
  • u011043551
  • 2017年03月25日 16:59
  • 2858

Unity3D中Animation的常见属性及方法

Animation.Play播放 function Play (mode : PlayMode = PlayMode.StopSameLayer) : bool function Play (ani...
  • W1095471150
  • W1095471150
  • 2016年10月12日 21:04
  • 1689

Unity3D学习笔记(八) 动画编辑器(animation窗口)

在unity3D内有PlayerPrefs类进行简单数据保存,如SetInt和GetInt存取整型数据,SetFloat和GetFloat存取浮点型数据,SetString和GetString存取字符...
  • ivebeenready
  • ivebeenready
  • 2015年09月22日 19:22
  • 1437

Animation动画总结1

动画类型 Android的animation由四种类型组成 2011-4-23 22:23 上传 下载附件(12.8 KB) Android动画模式 ...
  • zong4wei
  • zong4wei
  • 2013年03月14日 17:19
  • 413

Unity3D中Animation的常见属性及方法

Unity3D中Animation的常见属性及方法如下: Animation.Play播放 function Play (mode : PlayMode = PlayMode.StopSameLa...
  • bean244
  • bean244
  • 2014年03月05日 14:24
  • 43594

HTML5基础加强css样式篇(animation简写,控制多个动画,动画帧简写)(三十二)

1.animation简写例子: .box { /* .box 默认样式 */ margin: 2...
  • u010853130
  • u010853130
  • 2017年04月05日 16:01
  • 555
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Animation总结
举报原因:
原因补充:

(最多只允许输入30个字)