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资源实现;其二是补间动画,它是通过矩阵变化等方法操作位图实现的,因此补间动画也是针对单一位图的动画。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

View的状态属性简介

android:drawable 放一个drawable资源 android:state_pressed 是否按下,如一个按钮触摸或者点击。 android:state_focused 是否取得焦...

WindowManager和Window添加View的区别

WindowManager中有个添加View的函数: public void addView(View view, ViewGroup.LayoutParams params) Window中有个...

Android4.2.2 Gallery2源码分析(6)——GLView.java

[java] view plaincopyprint? // GLView is a UI component. It can render to a GLCanvas...

从BouncingBall.java中学习使用属性动画记录

/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Ve...

Android4.2.2 Gallery2源码分析(11)——Gallery的层次结构图

总结前文的内容,画出Gallery的基本架构层次图如下: 这里我省略了ActionBar等内容,只说主要界面。Activity主界面对应于GLRootView(继承自GLSurfaceView)...

Android4.2.2 Gallery2源码分析(2)——发现Gallery.java

上文中,main.xml是我直接提出来的,并没有说明是怎么找到它的,现在说明发现它的理由: 一般我们分析界面布局会用到hierarchyviewer这个工具,从工具中,我们对应到视图,最主要的视图id...

Android图形图画学习(11)——颜色相关

Android提供了一个颜色类Color.java提供各种不同的颜色,本节就从Color.java开始探讨颜色在代码中是如何表示的。 Android中使用的是ARGB色彩模式,用于32位位图存储结构。...

Android4.2.2 Gallery2源码分析(6)——GLView.java

// GLView is a UI component. It can render to a GLCanvas and accept touch // events. A GLView may ha...

Android4.2.2 Gallery2源码分析(10)——Activity于View的结合

在以往Activity中,我们大部分时候都在编写View,最后只需要在Activity的onCreate()函数中调用setContentView(new MyView())即可把对应的视图粘贴到了A...

Android4.2.2 Gallery2源码分析(5)——GLCanvasImpl.java

GLCanvasImpl.java是接口GLCanvas的唯一实现类,也就是说二者在功能上完全等同。代码中调用GLCanvas对象函数的地方,等效于调用GLCanvasImpl中的该函数,GLCanv...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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