android动画animation,Android动画——Animation

Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果

Frame Animation:顺序播放事先做好的图像,跟电影类似

在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的帮助。Animation是以XML格式定义的,定义好的XML文件存放在res\anim中。由于Tween Animation与Frame Animation的定义、使用都有很大的差异,我们将分开介绍,本篇幅中介绍Tween Animation的定义与使用,后续篇幅再详细介绍Frame Animation。按照XML文档的结构【父节点,子节点,属性】来介绍Tween Animation,其由4种类型:

Alpha:渐变透明度动画效果

Scale:渐变尺寸伸缩动画效果

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

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

在介绍以上4种类型前,先介绍Tween Animation共同的节点属性,关于节点的命名原则,请阅读AndroidManifest.xml文件结构说明。

表一

属性[类型]

功能

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:保持在最下层

看了以上节点,大家是不是都想开始定义动画了。下面我们就开始结合具体的例子,介绍4种类型各自特有的节点元素。

表二

XML节点

功能说明

alpha

渐变透明度动画效果

fromAlpha

属性为动画起始时透明度

0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字

toAlpha

属性为动画结束时透明度

表三

scale

渐变尺寸伸缩动画效果

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

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

fromXDelta toXDelta

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

fromYDelta toYDelta

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

表五

rotate

画面转移旋转动画效果

fromDegrees

为动画起始时物件的角度

说明 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转)

toDegrees

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

pivotX pivotY

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

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

看了上面的例子,想必大家也想看下,这些定义的动画,运行起来是什么样效果,下面运行Scale例子中的动画,界面变化如下:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

按照上面的讲述学习完了Tween Animation的定义,对Tween Animation有了详细的了解,再去了解下Android SDK的animation package(android.view.animation),其提供了操作Tween Animation所有的类。

Android SDK提供了基类:Animation,包含大量的set/getXXXX()函数来设置、读取Animation的属性,也就是前面表一中显示的各种属性。Tween Animation由4种类型:alpha、scale、translate、roate,在Android SDK中提供了相应的类,Animation类派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分别实现了平移、旋转、改变 Alpha 值等动画,每个子类都在父类的基础上增加了各自独有的属性。再去看下这几个类的构造函数,是不是与我们在表二、表三、表四、表五种定义的属性完全一样。 0818b9ca8b590ca3270a3433284dd417.png

在了解了Tween Animation的定义,对android.view.animation有了一些基本的认识后,开始介绍Tween Animation如何使用。Android SDK提供了2种方法:直接从XML资源中读取Animation,使用Animation子类的构造函数来初始化Animation对象,第二种方法在看了Android SDK中各个类的说明就知道如何使用了,下面简要说明从XML资源中读取Animation,按照应用程序开发的过程,介绍整个使用的过程,如下:

创建Android工程;

导入一张图片资源;

将res\layout\main.xml中的TextView取代为ImageView;

在res下创建新的文件夹anim,并在此文件夹下面定义Animation XML文件;

修改OnCreate()中的代码,显示动画资源;

关键代码,解析如下: //main.xml中的ImageView ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); //加载动画 Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); //使用ImageView显示动画 spaceshipImage.startAnimation(hyperspaceJumpAnimation); 工程的源代码提供给大家下载,下载地址,这里简要解析如下:

AnimationUtils提供了加载动画的函数,除了函数loadAnimation(),其他的到Android SDK中去详细了解吧;

所谓的动画,也就是对 view 的内容做一次图形变换;

Java代码   package net.blogjava.mobile.interpolators;       import android.app.Activity;    import android.os.Bundle;    import android.view.View;    import android.view.animation.Animation;    import android.view.animation.AnimationUtils;    import android.view.animation.TranslateAnimation;    import android.widget.AdapterView;    import android.widget.ArrayAdapter;    import android.widget.Spinner;       public class Main extends Activity implements           AdapterView.OnItemSelectedListener {        private static final String[] INTERPOLATORS = { "Accelerate", "Decelerate",                "Accelerate/Decelerate", "Anticipate", "Overshoot",                "Anticipate/Overshoot", "Bounce" };           @Override       public void onCreate(Bundle savedInstanceState) {               super.onCreate(savedInstanceState);            setContentView(R.layout.main);               Spinner s = (Spinner) findViewById(R.id.spinner);            ArrayAdapter adapter = new ArrayAdapter(this,                    android.R.layout.simple_spinner_item, INTERPOLATORS);            adapter                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);            s.setAdapter(adapter);            s.setOnItemSelectedListener(this);        }           public void onItemSelected(AdapterView parent, View v, int position, long id) {            final View target = findViewById(R.id.target);            final View targetParent = (View) target.getParent();            Animation animation = new TranslateAnimation(0.0f, targetParent                    .getWidth()                    - target.getWidth()                    - targetParent.getPaddingLeft()                    - targetParent.getPaddingRight(), 0.0f, 0.0f);            animation.setDuration(1000);            animation.setStartOffset(300);            animation.setRepeatMode(Animation.RESTART);            animation.setRepeatCount(Animation.INFINITE);               switch (position) {            case 0:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.accelerate_interpolator));                break;            case 1:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.decelerate_interpolator));                break;            case 2:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.accelerate_decelerate_interpolator));                break;            case 3:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.anticipate_interpolator));                break;            case 4:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.overshoot_interpolator));                break;            case 5:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.anticipate_overshoot_interpolator));                break;            case 6:                animation.setInterpolator(AnimationUtils.loadInterpolator(this,                        android.R.anim.bounce_interpolator));                break;            }               target.startAnimation(animation);        }           public void onNothingSelected(AdapterView parent) {        }    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值