Android动画之view动画

Android中的动画分为三种:View动画帧动画属性动画

View动画

一、概述:

View动画的作用对象是View

支持四种效果:平移(translate)、缩放(scale)、旋转(rotate)、透明(alpha)
 
分别对应这四个类:translateAnimation、scaleAnimation、rotateAnimation、alphaAnimation

二、使用

两种形式:XML和代码

1、xml

首先在res目录下创建anim目录	 
其次在anim目录下创建XML动画文件,如test_anim.xml
	 
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromXDelta="-100%"
            android:toXDelta="0"
            android:duration="@android:integer/config_shortAnimTime">
</translate>

 然后将动画效果应用到view中
	 
Button button = (Button) findViewById(R.id.test);
		
Animation translate = AnimationUtils.loadAnimation(this,R.anim.test_anim);

button.startAnimation(translate);

2、 代码

AlphaAnimation alpha = new AlphaAnimation(0,1);
        
alpha.setDuration(1000);

button.startAnimation(alpha);

3、监听

通过setAnimationListener的方法来监听view的动画,接口如下:
public static interface AnimationListener(){
		     void onAnimationStart(Animation animation);
			 void onAnimationEnd(Animation animation);
			 void onAnimationRepeat(Animation animation);
}

4、属性

<1> translate
		
	android:fromXDelta   表示X的起始值,比如0;
			 
	android:toXDelta     表示X的结束值,比如100;
			 
	android:fromYDelta   表示Y的起始值,比如0;
			 
	android:toYDelta     表示Y的结束值,比如100;
		
<2> scale

    android:fromXScale   表示水平方向缩放的起始值;
			 
	android:toXScale     表示水平方向缩放的结束值;
			 
	android:fromYScale   表示垂直方向缩放的起始值;
			 
	android:toYScale     表示垂直方向缩放的结束值;

    android:pivotX       缩放的轴点x的坐标;	
             
    android:pivoty       缩放的轴点y的坐标;

<3> rotate

    android:fromDegress   表示旋转开始的角度,比如0;
			 
	android:toDegress     表示旋转结束的角度,比如180;

    android:pivotX       旋转的轴点x的坐标;	
             
    android:pivoty       旋转的轴点y的坐标;	

<4> alpha

    android:fromAlpha   表示透明度起始值,比如0;
			 
	android:toAlpha     表示透明度结束值,比如1;	

除了上面介绍的值以外,还有一些同有的

    android:interpolator  设置插值器,默认@android:anim/accelerate_decelerate_interpolator加速减速插值器
            
    android:duration       动画持续时间

    android:fillAfter      动画结束以后是否停留在结束位置,true停留,false不停留

5、set

可以使用set标签实现多个动画同时作用于view

三、自定义View动画

除了系统提供的四种View动画以外,还可以自定义View动画。

自定义View只需继承Animation抽象类,重写initialize和applyTransformation方法

在initialize中做一些初始化工作,applyTransformation中进行相应的矩阵变换。

public class Rotate3dAnimation extends Animation {
         
         public Rotate3dAnimation(){}

         @Override
         public void initialize(int width, int height, int parentWidth, int parentHeight) {
             super.initialize(width, height, parentWidth, parentHeight);
             //做一些初始化工作        
         }

         @Override
         protected void applyTransformation(float interpolatedTime, Transformation t) {
             super.applyTransformation(interpolatedTime, t);
             //获取矩阵对象
             Matrix matrix = t.getMatrix();
             //do something...
         }
}

四、view动画的特殊使用场景

1、 LayoutAnimation

LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,这样它的子元素出场时

都会具有这种动画效果。经常被用在ListView中。有两种形式:xml和代码。

xml通常需要以下几步。
		 
<1> 在res/anim/目录定义LayoutAnimation,比如test_layout_animation.xml
			
	 <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"	
					android:delay="0.5"
					android:animationOrder="normal"
					android:animation="@anim/test_anim_item"/>
					
      android:delay 表示子元素的延迟时间。比如动画时间周期是300ms,则0.5表示每个子元素都需要延迟150ms才能播放入场动画。总体来说就是,第一个元素延迟150ms,第二个延迟300ms,一次类推
							 
      android:animationOrder 表示子元素的顺序,有三个选项:normal(顺序)、reverse(逆向)、random(随机)
				
	  android:animation 为子元素指定具体的入场动画
				
<2> 为子元素指定具体的入场动画。在res/anim/目录定义Animation,比如test_anim_item.xml
			
	<set xmlns:android="http://schemas.android.com/apk/res/android"
				    android:duration="300"
					android:interpolator="@android:anim/accelerate_interpolator">
                    <alpha
					     android:fromAlpha="0"
						 android:toAlpha="1" />
                    
                    <translate
					     android:fromXDelta="500"
						 android:toXDelta="0">
     </set>

<3> 为ViewGroup指定android:layoutAnimation属性,

     <ListView
			android:id="@+id/test_listView"
			android:layout_width="match_parent"
			android:layout_height="match_parent"
			android:layoutAnimation="@anim/test_layout_animation" />   

						
代码(LayoutAnimationController)
				     
		ListView listView = (ListView) findViewById(R.id.test_listView);
		//加载子元素的具体动画(这一步也可以使用代码实现)
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.test_anim_item);					
	    LayoutAnimationController controller = new LayoutAnimationController(animation);
		controller.setDelay(0.5);
		controller.setOrder(LayoutAnimation.ORDER_NORMAL);
		listView.setLayoutAnimation(controller);

2、Activity切换动画效果

Activity有默认的切换效果,但也可以自定义,主要是用到overridePendingTranslation(int enterAnim, int exitAnim)方法。 这个方法必须在startActivity(intent)或finish()之后调用才能生效。

enterAnim -- Activity被打开时,所需的动画资源id;
		
exitAnim  -- Activity被暂停时,所需的动画资源id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值