【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):
引入了一个ImageView控件作为动画操作的对象,引入一个Button用于控制动画,设置了Button的onClick属性。
2.MainActivity.java代码:
这里涉及了几个方法,下面做一下说明:
(1)startAnimation方法:控件调用该方法,传入一个动画对象,可以为控件设置动画效果;
(2)setFillAfter方法:动画对象调用该方法,传入一个布尔型的参数,可以设置该动画对象的属性,传入true表示动画结束后保持状态,默认是不保持状态。
(3)setDuration方法:动画对象调用此方法,传入毫秒数作为参数,表示动画持续的时间。
运行实例如下:
开始时图片透明度为1,点击“改变透明度”的按钮,透明度变为0;再次点击”改变透明度”的按钮,透明度由0变成1。
在res文件夹目录下新建一个anim的文件夹,然后在里面新建一个名为alpha.xml的xml文件,代码如下:
set在外围作为标签,透明度标签为alpha,常用属性这里解释一下,duration表示动画持续时间,fromAlpha表示开始透明度值,toAlpha表示结束透明度,repeatCount表示重复次数,repeatMode表示重复的模式,fillAfter表示结束后是否保持状态,interpolator表示插值器,可以改变动画的变化速率。
MainActivity.java代码如下:
这里用到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
下面对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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories