【Android 动画】View Animation详解(一)

安卓平台目前提供了两大类动画,在Android 3.0之前,一大类是View Animation,包括Tween animation(补间动画),Frame animation(帧动画),在android3.0中又引入了一个新的动画系统:property animation,即属性动画。本篇文章主要介绍View Animation的基本使用方法与技巧,属性动画将在下一篇博文中介绍。



Tween动画可以执行一系列简单变换(位置,大小,旋转,缩放和透明度)。所以,如果你有一个TextView对象,您可以移动,旋转,淡入淡出,或缩小文本。如果它有一个背景图像,背景图像会随着文本转化。

一、Frame Animation详解

1.帧动画展示的其实就是多个图片按顺序播放所产生的动画效果,我们一般情况下会在res/drawable/ filename.xml目录建立动画文件,动画文件的格式如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
<item
    android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer" />

</animation-list>

animation-list作为根布局包含了多个item,android:oneshot属性代表如果你只想执行一次动画,那么返回true,否则的话循环执行,返回false。

每一个Item代表单个的动画帧。必须是该动画元素的子元素。android:drawable属性代表该帧的图片,android:duration则代表了持续的时间。



2.实例Demo

1.在res/anim/rocket.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>

2.这个应用程序为使用该动画文件的组件设置动画(作为一个背景),然后播放动画:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();

3.运行效果

一、Tween Animation详解

Tween补间动画主要包含平移,旋转,缩放,渐变四种动画效果,每种动画都可以采用两种方式来实现,一种就是代码直接实现,另一种就是建立xml动画文件的方式来实现,这四种动画除了可以单一实现某一具体动画之外,还可以配合使用,可以通过set标签把各个动画整合在一起,产生更多特效,下面通过一个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>

  • set标签可以容纳其他的动画元素,把各个动画放在一个组里执行,代码中是通过AnimationSet来组织。

    • android:interpolator属性为插补器,它定义一个动画的变化率。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。
    • android:shareInterpolator属性,如果在一个set标签中包含多个动画效果,如果想让这些动画效果共享一个Interpolator,则设置为false,如果不想共享一个interpolator,则设置android:shareInterpolator=”true”,并且需要在每一个单独动画效果处添加interpolator。

  • Alpha代表AlphaAnimation,表示一个淡入淡出动画效果(其实就是透明度)。

    • android:fromAlpha表示透明度变化的开始值,其中0是透明,1是不透明的。
    • android:toAlpha表示透明度变化的结束值,其中0是透明,1是不透明的。

  • Scale代表ScaleAnimation,表示一个缩放动画的效果,你可以通过指定的pivotX和pivoty使图像从它的中心点开始向外(或向内)缩放。例如,如果值是以0,0(左上角)为缩放点,所有的缩放(放大)效果将向下和向右。

    • android:fromXScale 动画起始时 X坐标上的伸缩尺寸
    • android:toXScale 动画结束时 X坐标上的伸缩尺寸
    • android:fromYScale 动画起始时Y坐标上的伸缩尺寸
    • android:toYScale 动画结束时Y坐标上的伸缩尺寸
    • int pivotXType 动画在X轴相对于物件位置类型
    • float pivotXValue 动画相对于物件的X坐标的开始位置
    • int pivotYType 动画在Y轴相对于物件位置类型
    • float pivotYValue 动画相对于物件的Y坐标的开始位置

  • Translate代表TranslateAnimation,表示一个平移的动画效果。

    • float fromXDelta 动画开始的点离当前View X坐标上的差值
    • float toXDelta 动画结束的点离当前View X坐标上的差值
    • float fromYDelta 动画开始的点离当前View Y坐标上的差值
    • float toYDelta 动画开始的点离当前View Y坐标上的差值

  • Rotate代表RotateAnimation,表示一个旋转的动画效果。

    • float fromDegrees:旋转的开始角度。
    • float toDegrees:旋转的结束角度。
    • int pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
    • float pivotXValue:X坐标的伸缩值。
    • int pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
    • float pivotYValue:Y坐标的伸缩值。

1.Alpha淡入淡出效果

1-1.代码实现

//透明度从透明到不透明(1----0)
AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0f);
//设置动画执行时间
alphaAnimation.setDuration(1000);
//设置动画结束后是否停留在动画结束状态
alphaAnimation.setFillAfter(false);
imageView.startAnimation(alphaAnimation);

1-2.实现效果

2.通过xml动画文件来实现

  • 在res/anim目录下新建alpha.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        <!--设置动画时间1秒,组件从透明到不透明
        动画结束后恢复初始状态-->
        android:duration="1000"
        android:fillAfter="false"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>
  • 使用该xml动画文件
Animation animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
//开启动画
view.startAnimation(animation);

2.Scale缩放效果

2-1.代码实现

/**
* 设置缩放尺寸以当前控件的中心(0.5f)为基准缩放点   (ScaleAnimation.RELATIVE_TO_SELF),
* 缩放尺寸从1f到0f。
* x的缩放宽度为1f*自己的宽度--0f
* y的缩放高度为1f*自己的高度--0f
*/
ScaleAnimation scaleAnimation = new ScaleAnimation(1f, 0f, 1f, 0f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
//设置缩放时间为1秒
scaleAnimation.setDuration(1000);
//动画完成恢复初始状态
scaleAnimation.setFillAfter(false);
imageView.startAnimation(scaleAnimation);

2-2.实现效果

2.通过xml动画文件来实现

  • 在res/anim目录下新建scale.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <scale
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0"
        android:toYScale="0"
        android:fillAfter="false"
        />
</set>
  • 使用该xml动画文件
Animation animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);
//开启动画
view.startAnimation(animation);

3.Translate平移效果

3-1.代码实现

//设置从(0,0)到(0,-1.5f)以自身为基准平移
//x:0f * 移动组件的宽度 到 0f * 移动组件的宽度
//y:0f * 移动组件的高度 到 -1.5f * 移动组件的高度
TranslateAnimation animation = new TranslateAnimation(TranslateAnimation.RELATIVE_TO_SELF, 0f, TranslateAnimation.RELATIVE_TO_SELF, 0f, TranslateAnimation.RELATIVE_TO_SELF, 0f, TranslateAnimation.RELATIVE_TO_SELF, -1.5f);
        animation.setDuration(2000);// 设置动画执行时间
        animation.setFillAfter(true);// 设置动画执行结束后停留在结束位置
        imageView.startAnimation(animation);

3-2.实现效果

2.通过xml动画文件来实现

  • 在res/anim目录下新建translate.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="-150%"
        android:fillAfter="true"
        />
</set>
  • 使用该xml动画文件
Animation animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate);
//开启动画
view.startAnimation(animation);

4.Rotate旋转效果

4-1.代码实现

//设置以自身中心为旋转点,旋转360度
RotateAnimation animation = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
        animation.setFillAfter(true);
        animation.setDuration(1000);
        imageView.startAnimation(animation);

4-2.实现效果

2.通过xml动画文件来实现

  • 在res/anim目录下新建rotate.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360"
        android:fillAfter="false"
        />
</set>
  • 使用该xml动画文件
Animation animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
//开启动画
view.startAnimation(animation);

三、通过AnimationSet组合多个动画

1.在anim目录下新建set_anim.xml文件

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="100%"
        android:fillAfter="true" />

    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360"
        android:repeatCount="3"
        android:fillAfter="true"
        android:startOffset="1000"
        />

    <scale
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0"
        android:toYScale="0"
        android:startOffset="1000"
        android:fillAfter="true"
        />
</set>

2.使用

Animation animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.set_anim);
image.startAnimation(animation);

3.效果图

此处动画的实现先是平移到底部,然后缩放的同时进行旋转,android:startOffset属性是代表在多少时间之后执行的意思,此处设置为1000毫秒,意思是1000毫秒后执行该动画(即平移完成后执行)。

时间: 2024-10-04 12:26:44

【Android 动画】View Animation详解(一)的相关文章

Android进阶——属性动画Property Animation详解(一)

引言 前一篇文章Android入门--补间动画和帧动画应用小结总结了补间动画和帧动画及一些相关类的应用,基本可以掌握简单的缩放.旋转.透明度变化.平移的动画效果,但是需要实现更复杂的动画效果时,比如说希望View的切换动画.Layout的切换动画.3D旋转动画等等,这些View Animation都无法做到.此时Property Animation应运而生,这篇主要总结下属性动画的相关知识点. 一.Property Animation属性动画概述 属性动画,在我最先接触到Android 1.5时

Android动画系列 - PropertyAnim 详解

前言:上一篇文章传统View动画与Property动画基础及比较简单对Android动画系统的基础做了介绍,本篇文章将对PropertyAnimation进行全面深入的探讨,本篇文章可以分为两大块,从第六部分可以作为分界点.前五部分着重讲解了PropertyAnim的动画值的计算过程,ValueAnimator与ObjectAnimator以及TimeInterpolation与TypeEvaluator之间的介绍和比较,这几点是比较重要的,从第六部分开始是通过源码的角度分析了整个动画计算以及内

*Android动画View Animation

Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展和淡出等效果.Alpha——淡入淡出,Scale——缩放效果,Rotate——旋转,Transl

(四)Android动画开发---Animation动画效果详解

Android 使用Animation的具体操作方法我们将会在这篇文章中做一个详细的介绍.大家可以通过这里举出的代码进行解读,并从中了解到相关操作技巧,方便我们将来开发应用,并且加深对这一操作系统的理解程度. 在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义. 动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转

Android学习Scroller(五)——详解Scroller调用过程以及View的重绘

MainActivity如下: package cc.ww; import android.os.Bundle; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.app.Activity;

Android中Animation详解

Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,伸展,淡入淡出等效果 Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多 一.Tweened Animations Tweened Animations也有四种类型: Alpha:淡入淡出效果Scale:缩放效果Rotate:旋转效果Translate:移动效果 设置动画效果可以在XM

Android Animation详解一

讲解anroid.view.animation. android.view.animation Provides classes that handle tweened animations. Android provides two mechanisms that you can use to create simple animations: tweened animation, in which you tell Android to perform a series of simple

转 Android Activity之间动画完整版详解

标签:Android Activity动画详解 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.51cto.com/1823534/807337 大家可能遇到过跟小马一样的问题,就是在项目中不给Activity添加动画感觉好烂,特此,小马找个时间学习下Activity跳转时添加动画,网上资料一堆,但有些讲的是错的,而且只有文字没有效果,不如自己来,顺带试下什么效果,这个工程里面小马收集了一些常用

ANDROID L——Material Design详解(动画篇)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lollipop(5.0). 前几天发现Android5.0正式版的sdk已经可以下载了,而且首次搭载Android L系统的Nexus 6和 Nexus 9也即将上市. 所以是时候开始学习Android L了! 关于Android L如何配置模拟器和创建项目,如果大家有兴趣的话可以看看我之前的一篇文章: A