Android动画——Animation

2017-11-01  本文已影响15人  lee哥

在Android中,有两类动画,分别是Tween (补间动画)和Frame (帧动画)。

Tween补间动画提供了四种动画形式,分别是AlphaAnimation(渐变动画),RotateAnimation(旋转动画),ScaleAnimation(尺寸动画)、TranslateAnimation(位移动画),它们可以随意进行组合,组合成动组合动画AnimationSet。对于帧动画比较好理解,类似动画片的原理 ,一张张图片按照某种规则进行排序,然后按照一定速度切换,由于人眼的视觉暂留特性就会在大脑中形成连贯的动画画面了,电影院中的电影就是这种形式的动画。

AlphaAnimation  继承自 Animation类,常用构造方法是

AlphaAnimation(float fromAlpha , float toAlpha)

需要传入两个参数,一个是起始透明度值,第二个是结束透明度值,取值一般在 0 ~ 1 之间。每一种补间动画都可以通过两种方式实现,一种 是引入 xml 文件实现 。

通过代码实现 

AlphaAnimation alphaAnimation = new Animation(0,1);//初始操作,参数传入0和1,即透明度由0变成透明度1

img.startAnimation(alphaANimation);//开始动画

alphaAnimation.setFillAflter(true);//结束后保持状态

alphaAnimation.setDuration(2000);//动画持续时间,单位是毫秒

这里涉及了几个方法,

1、startAnimation 方法:控件调用该方法,传入一个动画对象,可以为控件设置动画效果;

2、setFillAfter 方法: 动画对象调用该方法,传入一个布尔型的参数,可以设置该动画对象的属性,传入true表示动画结束后保持状态,默认是不保持状态。

3、setDuration 方法:动画对象调用此方法,传入毫秒数作为参数,表示动画持续的时间;

引入xml文件实现

每一种补间动画都可以通过两种方式实现,下面看一下通过引用 xml 文件进行动画效果的实现。

在res文件夹目录下新建一个anim 的文件夹,然后在里面新建一个名为 alpha.xml 的 xml 文件,代码如下:

<?xml version = "1.0" encoding = "utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

        <alpha

                 android:duration = "1000"

                 android:fromAlpha = "1"

                 android:interpolator = "@android:anim/accelerate_interpolator"

                 android:repeatCount="3"

                 android:fillAfter="true"

                  android:repeatMode="restart"

                  android:toAlpha="0"/>

</set>

set 在外围作为标签,透明度标签为alpha ,常用属性 duration 表示动画持续时间,fromAlpha 表示开始透明度值, toAlpha 表示结束透明度,repeatCount 表示 重复次数,repeatMode 表示重复的模式,fillAfter表示结束后是否保持状态,interpolator 表示插值器,可以改变动画的变化速率。

然后在Activity里面,代码如下:

Animation alphaAnimation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);

image.startAnimation(alphaAnimation);//开始动画

alphaAnimation.setFillAfter(true);//动画结束后保持状态

alphaAnimation.setAnimationListener(new Animation.AnimationListener(){

Animation alphaAnim = AnimationUtils.loadAnimation(MainActivity.this,R.anim.alpha);

scan_ercode.startAnimation(alphaAnim);

alphaAnim.setFillAfter(true);

alphaAnim.setAnimationListener(newAnimation.AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

//动画开始时回调

}

@Override

public void onAnimationEnd(Animation animation) {

//动画结束时回调

}

@Override

public void onAnimationRepeat(Animation animation) {

//动画重复时回调

}

});

上面用到一个AnimationUtils的loadAnimation 方法获得一个Animation对象,该方法需要传入两个参数,第一个是上下文对象,第二个是动画文件。此外,调用了AlphaAnimation 的 setAnimationListener 方法设置了动画监听,用匿名内部类的方式引入了监听,复写了三个方法,分别是动画开始时、结束时、重复时进行回调。

上一篇下一篇

猜你喜欢

热点阅读