您的位置:首页 > 移动开发 > Android开发

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

2016-04-28 20:27 465 查看
对于传统动画,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方法:动画对象调用此方法,传入毫秒数作为参数,表示动画持续的时间。

运行实例如下:



开始时图片透明度为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方法设置了动画监听,用匿名内部类的方式引入监听,覆写了三个方法,分别是动画开始时、结束时、重复时进行回调,可以参照注释,运行项目实例如下:



点击动画,动画会重复播放三次,播放完之后显示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 动画