美文网首页
Android动画——Animation

Android动画——Animation

作者: lee哥 | 来源:发表于2017-11-01 14:00 被阅读15次

    在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 方法设置了动画监听,用匿名内部类的方式引入了监听,复写了三个方法,分别是动画开始时、结束时、重复时进行回调。

    相关文章

      网友评论

          本文标题:Android动画——Animation

          本文链接:https://www.haomeiwen.com/subject/qcvwpxtx.html