安卓 动画效果 Animation

Android 中  四种动画效果:

1.alpha:渐变透明度动画效果

2.scale:渐变尺寸的动画效果

3.translate:位置转移动画效果

4.rotate:旋转动画效果

(还可使用 set 定义动画集合:将几个不同的动作定义成一个组)

一、动画效果的属性

1.通用属性:

Android中,这几种动画效果的父类都为Animation,所以四种动画效果有着部分相同的属性

android:duration        动画持续时间,以毫秒为单位 

android:fillAfter          如果设置为true,控件动画结束时,将保持动画最后时的状态

android:fillBefore       如果设置为true,控件动画结束时,还原到开始动画前的状态

android:fillEnabled    与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态

android:repeatCount 重复次数

android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。

android:interpolator  设定插值器,其实就是指定的动作效果,比如弹跳效果等。*(文章最后会介绍)


2.各自特有的属性:

2.1 alpha-AlphaAnimation,--渐变透明度动画

android:fromAlpha   动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

2.2 rotate-RotateAnimation,--旋转动画

android:fromDegrees     开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数

android:toDegrees         结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数

android:pivotX               旋转点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

android:pivotY               旋转点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

2.3  scale-ScaleAnimation,--渐变尺寸动画

android:fromXScale    起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;

android:toXScale        结尾的X方向上相对自身的缩放比例,浮点值;

android:fromYScale    起始的Y方向上相对自身的缩放比例,浮点值

android:toYScale        结尾的Y方向上相对自身的缩放比例,浮点值;

android:pivotX            缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,

当为数值50时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;

如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点

如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标

android:pivotY           缩放起点Y轴坐标,取值及意义跟android:pivotX一样。

2.4  translate-TranslateAnimation --位置转移动画

android:fromXDelta     起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

android:fromYDelta    起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;

android:toXDelta         结束点X轴坐标

android:toYDelta        结束点Y轴坐标

(动画集合set-AnimationSet ,AnimationSet只有Animation通用的属性)

二、动画效果的使用方法

1.写在xml中,在java中使用

步骤:

(1)在res文件夹下新建anim文件夹,用于存放动画文件

(2) 在anim文件夹下,新建动画文件 (例:建一个透明度渐变动画 alphaanim.xml)

<?xml version="1.0" encoding="UTF-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fromAlpha="1.0"  
    android:toAlpha="0.1"  
    android:duration="3000"  
    android:fillBefore="true">  
</alpha> 
(建一个动画集合  animset.xml)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="3000"  
    android:fillBefore="true">  
      
  <alpha   
    android:fromAlpha="0.0"  
    android:toAlpha="1.0"/>  
    
  <scale  
    android:fromXScale="0.0"  
    android:toXScale="1.4"  
    android:fromYScale="0.0"  
    android:toYScale="1.4"  
    android:pivotX="50"  
    android:pivotY="50"/>  
    
  <rotate  
    android:fromDegrees="0"  
    android:toDegrees="720"  
    android:pivotX="50%"  
    android:pivotY="50%"/>  
         
</set> 

(3 在java中使用动画

		//载入定义在xml中的动画
		final Animation alphaAnim = AnimationUtils.loadAnimation(this, R.anim.alphaanim);
		//按钮点击事件,点击后,TextView 展现动画效果
		alpha.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//开始动画
				textView.startAnimation(alphaAnim);
				
			}
		});


2. java文件中直接写动画,然后使用

(例)java中直接定义一个透明度渐变动画,然后点击按钮时使用

		//java中定义 一个 透明度渐变的动画效果,从透明度0.8变到0.2
		final AlphaAnimation alphaAnimation = new AlphaAnimation(0.8f, 0.2f);
		//设置动画时长为2秒
		alphaAnimation.setDuration(2000);
		//按钮点击事件,点击后,TextView 展现动画效果
		alpha.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//开始动画
				textView.startAnimation(alphaAnimation);
				
			}
		});

(例:在java中定义一个动画集合,让TextView 一边旋转一边消失)

		final AnimationSet animationSet = new AnimationSet(false);
		animationSet.setDuration(2000);
		//定义一个旋转动画,从30度旋转到720度,以自身中点为旋转中心
		final RotateAnimation rotateAnimation = new RotateAnimation(30.0f, 720f, 
				RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
				RotateAnimation.RELATIVE_TO_SELF, 0.5f);
		//java中定义 一个 透明度渐变的动画效果,从透明度0.8变到0.2
		final AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
		//加入到动画集合后,该设置无效,时间长度变为和AnimationSet的时间长度相同
		alphaAnimation.setDuration(5000);
		//将两个动画效果添加到 动画集合中
		animationSet.addAnimation(alphaAnimation);
		animationSet.addAnimation(rotateAnimation);
		//按钮点击事件,点击后,TextView 展现动画效果
		animSet.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				textView.startAnimation(animationSet);
			}
		});

三、interpolator  插值器

interpolator  插值器,其实就是指定的动作效果

android:interpolator="@android:anim/decelerate_interpolator"  (xml中定义interpolator)

rotateAnimation.setInterpolator(new DecelerateInterpolator()); (java中设置interpolator)

可设定的具体的值:

AccelerateDecelerateInterpolator   在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator                     在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator                      开始的时候向后然后向前甩
AnticipateOvershootInterpolator     开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator                          动画结束的时候弹起
CycleInterpolator                             动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator                    在动画开始的地方快然后慢
LinearInterpolator                            以常量速率改变
OvershootInterpolator                      向前甩一定值后再回到原来位置

(例:xml中定义一个移动的动画效果,先块后慢)

<?xml version="1.0" encoding="UTF-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fromXDelta="30"   
    android:toXDelta="-80"  
    android:fromYDelta="30"  
    android:toYDelta="-80"  
    android:duration="2000"  
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fillBefore="true">  
    <!-- android:interpolator="@android:anim/decelerate_interpolator"
    	使动画移动效果先快后慢 -->
</translate>  
(例:java中定义一个动画集合,使动画开始的时候向后,然后向前旋转。整个动画过程中TextView不断变透明)

		final AnimationSet animationSet = new AnimationSet(false);
		animationSet.setDuration(2000);
		//定义一个旋转动画,从30度旋转到720度,以自身中点为旋转中心
		final RotateAnimation rotateAnimation = new RotateAnimation(0.0f, 720f, 
				RotateAnimation.RELATIVE_TO_SELF, 0.5f, 
				RotateAnimation.RELATIVE_TO_SELF, 0.5f);
		//
		rotateAnimation.setInterpolator(new AnticipateInterpolator());
		//java中定义 一个 透明度渐变的动画效果,从透明度0.8变到0.2
		final AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
		//将两个动画效果添加到 动画集合中
		animationSet.addAnimation(alphaAnimation);
		animationSet.addAnimation(rotateAnimation);
		//按钮点击事件,点击后,TextView 展现动画效果
		animSet.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				textView.startAnimation(animationSet);
			}
		});






猜你喜欢

转载自blog.csdn.net/qq_34763699/article/details/54667879