Animation介绍:

在Android SDK介绍了2种Animation模式:

1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:帧动画,顺序播放事先做好的图像,是一种画面转换动画。

Android的animation由四种类型组成

在XML文件中:

alpha       渐变透明度动画效果

scale        渐变尺寸伸缩动画效果

translate  画面转换位置移动动画效果

rotate      画面转移旋转动画效果

在Java源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性:

AlphaAnimation       渐变透明度动画效果

ScaleAnimation        渐变尺寸伸缩动画效果

TranslateAnimation  画面转换位置移动动画效果

RotateAnimation      画面转移旋转动画效果

Tween Animation共同的节点属性

属性[类型]

功能

备注

Duration[long]

属性为动画持续时间

时间以毫秒为单位

fillAfter [boolean]

当设置为true ,该动画转化在动画结束后被应用

fillBefore[boolean]

当设置为true ,该动画转化在动画开始前被应用

interpolator

指定一个动画的插入器

有一些常见的插入器

accelerate_decelerate_interpolator

加速-减速 动画插入器

accelerate_interpolator

加速-动画插入器

decelerate_interpolator

减速- 动画插入器

其他的属于特定的动画效果

repeatCount[int]

动画的重复次数

RepeatMode[int]

定义重复的行为

1:重新开始  2:plays backward

startOffset[long]

动画之间的时间间隔,从上次动画停多少时间开始执行下个动画

zAdjustment[int]

定义动画的Z Order的改变

0:保持Z Order不变

1:保持在最上层

-1:保持在最下层

表二

XML节点

功能说明

alpha

渐变透明度动画效果

<alpha

android:fromAlpha=”0.1″

android:toAlpha=”1.0″

android:duration=”3000″ />

fromAlpha

属性为动画起始时透明度

0.0表示完全透明

1.0表示完全不透明

以上值取0.0-1.0之间的float数据类型的数字

duration为动画持续时间,ms单位

toAlpha

属性为动画结束时透明度

表三

scale

渐变尺寸伸缩动画效果

<scale

android:interpolator= “@android:anim/accelerate_decelerate_interpolator”

android:fromXScale=”0.0″

android:toXScale=”1.4″

android:fromYScale=”0.0″

android:toYScale=”1.4″

android:pivotX=”50%”

android:pivotY=”50%”

android:fillAfter=”false”

android:startOffset=“700”

android:duration=”700″

android:repeatCount=”10″ />

fromXScale[float] fromYScale[float]

为动画起始时,X、Y坐标上的伸缩尺寸

0.0表示收缩到没有

1.0表示正常无伸缩

值小于1.0表示收缩

值大于1.0表示放大

toXScale [float]

toYScale[float]

为动画结束时,X、Y坐标上的伸缩尺寸

pivotX[float]

pivotY[float]

为动画相对于物件的X、Y坐标的开始位置

属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置

表四

translate

画面转换位置移动动画效果

<translate

android:fromXDelta=”30″

android:toXDelta=”-80″

android:fromYDelta=”30″

android:toYDelta=”300″

android:duration=”2000″ />

fromXDelta

toXDelta

为动画、结束起始时 X坐标上的位置

fromYDelta

toYDelta

为动画、结束起始时 Y坐标上的位置

表五

rotate

画面转移旋转动画效果

<rotate

android:interpolator=”@android:anim/accelerate_decelerate_interpolator”

android:fromDegrees=”0″

android:toDegrees=”+350″

android:pivotX=”50%”

android:pivotY=”50%”

android:duration=”3000″ />

fromDegrees

为动画起始时物件的角度

说明

当角度为负数——表示逆时针旋转

当角度为正数——表示顺时针旋转

(负数from——to正数:顺时针旋转)

(负数from——to负数:逆时针旋转)

(正数from——to正数:顺时针旋转)

(正数from——to负数:逆时针旋转)

toDegrees

属性为动画结束时物件旋转的角度 可以大于360度

pivotX

pivotY

为动画相对于物件的X、Y坐标的开始位

说明:以上两个属性值 从0%-100%中取值

50%为物件的X或Y方向坐标上的中点位置

Interpolator介绍

Interpolator定义一个动画的变化率,这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input)。

Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:

AccelerateDecelerateInterpolator

在动画开始与结束的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator

在动画开始的地方速率改变比较慢,然后开始加速

CycleInterpolator

动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator

在动画开始的地方速率改变比较慢,然后开始减速

LinearInterpolator

在动画的以均匀的速率改变

Frame Animation

Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package, Android SDK提供了另外一个类AnimationDrawable来定义、使用Frame Animation。

Frame Animation可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:

XML属性

说明

drawable

当前帧引用的drawable资源

duration

当前帧显示的时间(毫秒为单位)

oneshot

如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。

variablePadding

If true, allows the drawable’s padding to change based on the current state that is selected.

visible

规定drawable的初始可见性,默认为flase;

下面就给个具体的XML例子,来定义一帧一帧的动画:

<animation-listxmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">

<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>

上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。

然后我们将以上XML保存在res/anim/文件夹下,命名为rocket_thrust.xml,显示动画的代码:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);

rocketImage.setBackgroundResource(R.anim.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

}

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

rocketAnimation.start();

return true;

}

return super.onTouchEvent(event);

}

代码运行的结果:3张图片按照顺序的播放一次。

有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start();不能在onCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在onCreate()中启动动画,就只能看到第一张图片。

下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:

AnimationDrawable

获取、设置动画的属性

int getDuration()

获取动画的时长

int getNumberOfFrames()

获取动画的帧数

boolean isOneShot()

Void setOneShot(boolean oneshot)

获取oneshot属性

设置oneshot属性

void inflate(Resurce r,XmlPullParser p,

AttributeSet attrs)

增加、获取帧动画

Drawable getFrame(int index)

获取某帧的Drawable资源

void addFrame(Drawable frame,int duration)

为当前动画增加帧(资源,持续时长)

动画控制

void start()

开始动画

void run()

外界不能直接调用,使用start()替代

boolean  isRunning()

当前动画是否在运行

void stop()

停止当前动画

WindowAnimation和ActivityAnimation的区别

1.windowAnimation

windowEnterAnimation和windowExitAnimation。

ActivityAnimation

android:activityOpenEnterAnimation,android:activityOpenExitAnimation,

android:activityCloseEnterAnimation,android:activityCloseExitAnimation。

2.在项目中WindowAnimation的控制权大于Activity的控制权,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么可能(因为这种情况非常多)只会执行WindowAnimation。

3.对于WindowAnimation的定义很简单,在style.xml文件中只需要继承Animation Style即可。

<style name="Animation" parent="@android:style/Animation”>

<!--窗体进入动画—>

<item name="android:windowEnterAnimation">@anim/slide_left_enter</item>

<!--窗体退出动画—>

<item name="android:windowExitAnimation">@anim/slide_right_exit</item>

</style>

对于Activity,需要继承Animation Activity Style

<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity”>

<item name="android:activityOpenEnterAnimation">@android:anim/slide_in_left</item>

<item name="android:activityOpenExitAnimation">@android:anim/slide_out_right</item>

<item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>

<item name="android:activityCloseExitAnimation">@anim/push_left_out</item>

</style>

1当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation

2当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation

3当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation

4当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation

从上述2中动画的定义上来看,显然ActivityAnimation更为复杂,但这种复杂带来的转场效果非常好,可以同时控制2个Activity的动画,而不像WindowAnimation只能控制下一个Activity的窗体动画。

5.在开发中,窗体动画也可以使用 Activity.overridePendingTransition来设置,也可以定义在主题中,但Activity只能使用在主题中

<application

android:name="test.view.weitop.BaseApplication"

android:allowBackup="false"

android:hardwareAccelerated="false"

android:icon="@drawable/app_logo"

android:label="@string/app_name"

android:largeHeap="true"

android:theme="@style/Theme.App" >

</application>

Android布局动画,所谓布局动画并不是指专门作用在ViewGroup上的动画,而是作用到不居中的Child的有序动画

1、LayoutAnimationController --->第三方控件 WheelView的核心部分

ScaleAnimation sa =new ScaleAnimation(0.5f, 1f, 0.5f, 1f, Animation.RELATIVE_TO_SELF, 0.5f,  Animation.RELATIVE_TO_SELF, 0.5f);

sa.setDuration(2000);

LayoutAnimationController lac = new LayoutAnimationController(sa, 0.5f);

lac.setOrder(LayoutAnimationController.ORDER_REVERSE);

rootView.setLayoutAnimation(lac);

2、android:animateLayoutChanges="true"

表示布局中childView的的大小改变,删除,增加时的 fade in或者 fade out的动画。

3.android:layoutAnimation="@anim/listview_anim"

android:layoutAnimation 和LayoutAnimationController作用类似,不同点在于,前者定义在xml中,后者使用代码编写。

android Animation介绍的更多相关文章

  1. Android Animation学习(六) View Animation介绍

    Android Animation学习(六) View Animation介绍 View Animation View animation系统可以用来执行View上的Tween animation和F ...

  2. Android Animation学习(一) Property Animation原理介绍和API简介

    Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...

  3. Android Animation学习(一) Property Animation介绍

    Android Animation Android framework提供了两种动画系统: property animation (introduced in Android 3.0)和view an ...

  4. android动画介绍之 自己定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本使用方法.小伙伴们了解的怎么样了?假设还没有了解过Animation的小伙伴能够看看这篇博客 android动画介绍--Animation 实现loading动画 ...

  5. android动画介绍之 自定义Animation动画实现qq抖一抖效果

    昨天我们介绍了Animation的基本用法.小伙伴们了解的怎么样了?如果还没有了解过Animation的小伙伴可以看看这篇博客 android动画介绍--Animation 实现loading动画效果 ...

  6. android动画介绍--Animation 实现loading动画效果

    Animation的使用方法并不难.这里简单的介绍一下使用方法. 先看效果图: 效果还是不错的吧. 下面来看看使用方法. 动画效果是通过Animation来实现的,一共有四种,分别为: AlphaAn ...

  7. android Animation笔记

    日历   公告   关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图 ...

  8. Android Animation学习笔记

    原文地址: http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html 关于动画的实现,Android提供了Animation,在And ...

  9. Android animation学习笔记之view/drawable animation

    前一章中总结了android animation中property animation的知识和用法,这一章总结View animation和Drawable animation的有关知识: View ...

随机推荐

  1. 让ASP.NET5在Jexus上飞呀飞

    就在最近一段时间,“Visual Studio 2015 CTP 5”(以下简称CTP5)发布了,CTP5的发布不仅标志着新一代的VisualStudio正式发布又向前迈出了一步,还标志着距离ASP. ...

  2. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  3. 用Excel做出比肩任务管理软件的操作技巧

    用Excel做出比肩任务管理软件的操作技巧 在项目管理中,网上有各种各样的工具可以选择,到底用哪个,曾一度困扰着我.我是一个有轻度强迫症的人,总是喜欢试用各种各样的系统,以比较他们之间的不同,试图选择 ...

  4. 【Java并发编程实战】-----“J.U.C”:Exchanger

    前面介绍了三个同步辅助类:CyclicBarrier.Barrier.Phaser,这篇博客介绍最后一个:Exchanger.JDK API是这样介绍的:可以在对中对元素进行配对和交换的线程的同步点. ...

  5. 完善Person页面的视图操作功能

    经过上一篇,我们的person的权限已经正常加上了.那么我们回到我们的菜单类.给他重新加上权限. 这样的话,我们在启动页面的时候就不会看见联系人管理菜单了.只有登录后才可以看到菜单信息了. 添加控制器 ...

  6. MySQL基础知识

    一.MySQL安装 MySQL的下载 http://dev.mysql.com/downloads/mysql/ MySQL版本选择 MySQL功能自定义选择安装 1.功能自定义选择 2.路径自定义选 ...

  7. 遍历dynamic的方式

    一.遍历ExpandoObject /// <summary> /// 遍历ExpandoObject /// </summary> [TestMethod] public v ...

  8. 深入MySQL索引

    MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...

  9. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

  10. ElasticSearch 5学习(3)——单台服务器部署多个节点

    一般情况下单台服务器只会部署一个ElasticSearch node,但是在学习过程中,很多情况下会需要实现ElasticSearch的分布式效果,所以需要启动多个节点,但是学习开发环境(不想开多个虚 ...