【Android动画九章】-AlphaAnimation(渐变动画)

对于传统动画,Android提供了两类动画,即Tween(补间动画)和Frame(帧动画)。Tween动画提供了四种动画形式,即AlphaAnimation(渐变动画)、RotateAnimation(旋转动画)、ScaleAnimation(尺寸动画)、TranslateAnimation(位移动画),当然这些动画可以随意进行组合成组合动画AnimationSet。对于帧动画比较好理解,类似动画片的原理,一张张图片按照某种规则进行排序,然后按照一定速度切换起来,由于人眼的视觉暂留特性就会在大脑中形成连贯的动画画面了,电影院中的电影就是这种形式的动画。
下面对AlphaAnimation的用法进行讲解:
public class
AlphaAnimation
extends Animation
java.lang.Object
↳ android.view.animation.Animation
↳ android.view.animation.AlphaAnimation
AlphaAnimation继承自Animation类,常用构造方法如下:
AlphaAnimation(float fromAlpha, float toAlpha)
需要传入两个参数,第一个是起始透明度值,第二个是结束透明度值,取值一般在0-1之间。每一种补间动画都可以通过两种方式实现,一种代码实现,另一种是引入xml文件实现,下面分别作介绍。

通过代码实现

首先看一个实例:
1.布局文件(activity_main):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="demo.androidwar.com.animation.MainActivity">

    <ImageView  android:id="@+id/imageview" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:layout_margin="10dp" android:src="@mipmap/ic_launcher" />

    <Button  android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:gravity="center" android:onClick="changeAlpha" android:text="改变透明度" android:textSize="16sp" />
</LinearLayout>

引入了一个ImageView控件作为动画操作的对象,引入一个Button用于控制动画,设置了Button的onClick属性。
2.MainActivity.java代码:

package demo.androidwar.com.animation;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    private boolean isAlphaZero = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageview);
    }

    public void changeAlpha(View view) {
        if (isAlphaZero) {
            AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);//初始化操作,参数传入0和1,即由透明度0变化到透明度为1
            imageView.startAnimation(alphaAnimation);//开始动画
            alphaAnimation.setFillAfter(true);//动画结束后保持状态
            alphaAnimation.setDuration(2000);//动画持续时间,单位为毫秒
            isAlphaZero = false;//标识位
        } else {
            AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);//初始化操作,参数传入1和0,即由透明度1变化到透明度为0
            imageView.startAnimation(alphaAnimation);//开始动画
            isAlphaZero = true;//标识位
            alphaAnimation.setFillAfter(true);//动画结束后保持状态
            alphaAnimation.setDuration(2000);//动画持续时间
        }
    }
}

这里涉及了几个方法,下面做一下说明:
(1)startAnimation方法:控件调用该方法,传入一个动画对象,可以为控件设置动画效果;
(2)setFillAfter方法:动画对象调用该方法,传入一个布尔型的参数,可以设置该动画对象的属性,传入true表示动画结束后保持状态,默认是不保持状态。
(3)setDuration方法:动画对象调用此方法,传入毫秒数作为参数,表示动画持续的时间。
运行实例如下:
【Android动画九章】-AlphaAnimation(渐变动画)_第1张图片
开始时图片透明度为1,点击“改变透明度”的按钮,透明度变为0;再次点击”改变透明度”的按钮,透明度由0变成1。

引入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表示插值器,可以改变动画的变化速率。
MainActivity.java代码如下:

package demo.androidwar.com.animation;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageview);
    }

    public void changeAlpha(View view) {
        Animation alphaAnimation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
        imageView.startAnimation(alphaAnimation);//开始动画
        alphaAnimation.setFillAfter(true);//动画结束后保持状态
        //添加动画监听
        alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始时回调
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //动画结束时回调
                Toast.makeText(MainActivity.this, "动画结束", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                //动画重复时回调
            }
        });
    }
}

这里用到AnimationUtils的loadAnimation方法获得一个Animation对象,该方法需要传入两个参数,第一个是上下文对象,第二个是动画文件。此外,调用了AlphaAnimation的setAnimationListener方法设置了动画监听,用匿名内部类的方式引入监听,覆写了三个方法,分别是动画开始时、结束时、重复时进行回调,可以参照注释,运行项目实例如下:
【Android动画九章】-AlphaAnimation(渐变动画)_第2张图片
点击动画,动画会重复播放三次,播放完之后显示Toast。

喜欢的朋友请关注我,另欢迎阅读我的电子书
百度阅读:
http://yuedu.baidu.com/ebook/284b41a1e518964bce847c90?qq-pf-to=pcqq.c2c###
亚马逊:
http://www.amazon.cn/Android-%E7%99%BE%E6%88%98%E7%BB%8F%E5%85%B8-%E5%8D%B7I-%E5%BC%A0%E4%BA%9A%E8%BF%90/dp/B01ER5R9U2?ie=UTF8&keywords=Android%E7%BB%8F%E5%85%B8&qid=1461806976&ref_=sr_1_6&s=digital-text&sr=1-6

你可能感兴趣的:(动画,android)