android学习之animation

 关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画

在实现动画时,android提供如下4中animation的类型:

先给出几种ainimation的xml配置

scale:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	 <scale  
     android:interpolator= "@android:anim/decelerate_interpolator"    
     android:fromXScale="0.0"    
     android:toXScale="1"    
     android:fromYScale="0.0"    
     android:toYScale="1"    
     android:pivotX="0%"    
     android:pivotY="0%"    
     android:startOffset="0"    
     android:duration="500"
     /> 
</set>
<!-- 
interpolator指定动画插入器,常见的有加速减速插入器accelerate_decelerate_interpolator,加速插入器accelerate_interpolator,减速插入器decelerate_interpolator。
fromXScale,fromYScale,动画开始前X,Y的缩放,0.0为不显示,1.0为正常大小
toXScale,toYScale,动画最终缩放的倍数,1.0为正常大小,大于1.0放大
pivotX,pivotY动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从屏幕中间开始
startOffset,动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,单位毫秒
duration,一次动画效果消耗的时间,单位毫秒,值越小动画速度越快
repeatCount,动画重复的计数,动画将会执行该值+1次
repeatMode,动画重复的模式,reverse为反向,当第偶次执行时,动画方向会相反。restart为重新执行,方向不变
 -->
translate:

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

    android:interpolator="@android:anim/decelerate_interpolator"

    android:fromXDelta="-10%p"

    android:toXDelta="0%p"

    android:duration="500">

</translate>
alpha:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 透明度控制动画效果 alpha
            浮点型值:
                fromAlpha 属性为动画起始时透明度
                toAlpha   属性为动画结束时透明度
                        说明: 
                    0.0表示完全透明
                    1.0表示完全不透明
                        以上值取0.0-1.0之间的float数据类型的数字
    
            长整型值:
                duration  属性为动画持续时间
                        说明:     
                            时间以毫秒为单位
    -->
    
    <alpha 
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="500"
        />
    
</set>

rotate:
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <rotate  
        android:fromDegrees="0"  
        android:toDegrees="359"  
        android:duration="500"  
        android:repeatCount="0"  
        android:pivotX="50%"  
        android:pivotY="50%" />  
</set>  
<!-- android:fromDegrees 起始的角度度数
android:toDegrees 结束的角度度数,负数表示逆时针,正数表示顺时针。如10圈则比android:fromDegrees大3600即可
android:pivotX 旋转中心的X坐标
浮点数或是百分比。浮点数表示相对于Object的左边缘,如5; 百分比表示相对于Object的左边缘,如5%; 另一种百分比表示相对于父容器的左边缘,如5%p; 一般设置为50%表示在Object中心
android:pivotY 旋转中心的Y坐标
浮点数或是百分比。浮点数表示相对于Object的上边缘,如5; 百分比表示相对于Object的上边缘,如5%; 另一种百分比表示相对于父容器的上边缘,如5%p; 一般设置为50%表示在Object中心
android:duration 表示从android:fromDegrees转动到android:toDegrees所花费的时间,单位为毫秒。可以用来计算速度。
android:interpolator表示变化率,但不是运行速度。一个插补属性,可以将动画效果设置为加速,减速,反复,反弹等。默认为开始和结束慢中间快,
android:startOffset 在调用start函数之后等待开始运行的时间,单位为毫秒,若为10,表示10ms后开始运行
android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止
android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。在android:repeatCount大于0或为infinite时生效
android:detachWallpaper 表示是否在壁纸上运行
android:zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。
normal保持内容当前的z轴顺序
top运行时在最顶层显示
bottom运行时在最底层显示 -->
再给出main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">
     <TextView 
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="100dp"
        android:background="#437fad"
        android:text="其他控件"
        android:onClick="true"
        android:textSize="30sp"
        android:gravity="center"
        />
      <TextView
        android:id="@+id/view1" 
        android:layout_width="80dp"
        android:layout_height="match_parent" 
        android:layout_marginLeft="100dp" 
        android:gravity="center"
        android:text="这里是动画的text......"
        android:background="#000000"
        android:visibility="gone"/>
    
   
    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="100dp"
        android:id="@+id/btn_widget"
        android:background="#ffffff"
        > 
        <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="lsitBtn1"
        android:textSize="20sp"/>
        <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="lsitBtn2"
        android:textSize="20sp"
        android:layout_below="@id/btn1"/>
        <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="lsitBtn3"
        android:textSize="20sp"
        android:layout_below="@id/btn2"/>
        <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="lsitBtn4"
        android:textSize="20sp"
        android:layout_below="@id/btn3"/>
    </RelativeLayout>
    
        
   
    
   
    
</RelativeLayout>
    

最后是mainactivity:

package com.example.animationtest;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity {
	//定义4个Button,其中:btn1是translate,btn2是scale,btn3是alpha
	//btn4是rotate
	private Button startBtn1,startBtn2,startBtn3,startBtn4;
	private TextView myView1;
	private TextView webview;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		startBtn1 = (Button) findViewById(R.id.btn1);
		startBtn2 = (Button) findViewById(R.id.btn2);
		startBtn3 = (Button) findViewById(R.id.btn3);
		startBtn4 = (Button) findViewById(R.id.btn4);
		myView1 = (TextView) findViewById(R.id.view1);
		webview = (TextView) findViewById(R.id.textview);
		startBtn1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				 if(isViewVisible(myView1)){
				 	ViewGoneTanslate(myView1);
				 }
				 else{
					ViewVisibleTanslate(myView1);
					 }
			 }
			
		});
		startBtn2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				 if(isViewVisible(myView1)){
				 	ViewGoneScale(myView1);
				 }
				 else{
					ViewVisibleScale(myView1);
					 }
			 }
			
		});
		startBtn3.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				 if(isViewVisible(myView1)){
				 	ViewGoneAlpha(myView1);
				 }
				 else{
					ViewVisibleAlpha(myView1);
					 }
			 }
			
		});
		startBtn4.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				 if(isViewVisible(myView1)){
				 	ViewGoneRotate(myView1);
				 }
				 else{
					ViewVisibleRotate(myView1);
					 }
			 }
			
		});
		webview.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				if(isViewVisible(myView1))
					ViewGoneAlpha(myView1);
			}
		});
		
	}
	//判断此时的view是否可见
	public boolean isViewVisible(View v) {
		if(v.getVisibility()==View.VISIBLE)
			return true;
		else
			return false;
	}
	//对4中动画效果,每种有2个状态,一个是动画显示,一个是动画消失
	public void ViewGoneTanslate(View v) {
		v.setVisibility(View.GONE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_translate);
		v.startAnimation(scale);
	}
	public void ViewVisibleTanslate(View v) {
		v.setVisibility(View.VISIBLE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.translate);
		v.startAnimation(scale);
	}
	public void ViewGoneScale(View v) {
		v.setVisibility(View.GONE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_scale);
		v.startAnimation(scale);
	}
	public void ViewVisibleScale(View v) {
		v.setVisibility(View.VISIBLE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);
		v.startAnimation(scale);
	}
	public void ViewGoneAlpha(View v) {
		v.setVisibility(View.GONE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.anti_alpha);
		v.startAnimation(scale);
	}
	public void ViewVisibleAlpha(View v) {
		v.setVisibility(View.VISIBLE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
		v.startAnimation(scale);
	}
	public void ViewGoneRotate(View v) {
		v.setVisibility(View.GONE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
		v.startAnimation(scale);
	}
	public void ViewVisibleRotate(View v) {
		v.setVisibility(View.VISIBLE);
		Animation scale=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
		v.startAnimation(scale);
	}

}


最后,附上源码下载地址: http://download.csdn.net/detail/photoed/7550501

欢迎大家一起讨论。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值