Tween动画

abdroid提供了两种动画:Tween金额Fram动画,下面介绍第一种:

Tween动画是通过对view的内容通过一系列的图形变化(包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果可以在xml文件里做,也可以采用编码来做:

下面的demo实现了2种方法,即,1、在代码里实现;2、在src文件下创建anim文件,用XML里实现

首先大家看一下布局:就是5个按键,点击按键的时候Imgeview图片做相应的动作。

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.animationdemo.MainActivity$PlaceholderFragment" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/b1"
            android:layout_width="48dp"
            android:layout_height="wrap_content"
            android:text="透明" />

        <Button
            android:id="@+id/b2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="旋转" />

        <Button
            android:id="@+id/b3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="缩放" />

        <Button
            android:id="@+id/b4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="平移" />
        
        <Button
            android:id="@+id/b5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="组合" />
    </LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal|center_vertical"
    >
		<ImageView 
	    android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/im"
		android:src="@drawable/zp"
		    />
</LinearLayout>
</LinearLayout>

  2、下面看看在xml文件下定义动画结构图:

 

因为在前面定义的透明、平移、旋转、缩放最后都复制到了set的组合动画文件里了,这里就只给出set的xml文件

<?xml version="1.0" encoding="utf-8"?>
<set>
    <rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="2000"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="1"
>
	</rotate>

    <alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
   android:fromAlpha="0"
   android:toAlpha="1"
   android:repeatCount="1"
   android:duration="1000"
    >
</alpha>

    <scale
    android:fromXScale="0"
    android:toXScale="1"
    android:fromYScale="0"
    android:toYScale="1"
    android:duration="2000"
    android:repeatCount="1"
    xmlns:android="http://schemas.android.com/apk/res/android">
</scale>

    <translate
    android:fromXDelta="-100"
    android:toXDelta="150"
    android:fromYDelta="-100"
    android:toYDelta="150"
    android:duration="2000"
    android:repeatCount="1"
    xmlns:android="http://schemas.android.com/apk/res/android">
    
</translate>
    
    
</set>

  最终我们用2种方式实现了前面四个按键的操作,和第5个组合动画操作:

public class MainActivity extends ActionBarActivity implements OnClickListener {

	private Button bt1,bt2,bt3,bt4,bt5;
	private ImageView im;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1=(Button) findViewById(R.id.b1);
        bt2=(Button) findViewById(R.id.b2);
        bt3=(Button) findViewById(R.id.b3);
        bt4=(Button) findViewById(R.id.b4);
        bt5=(Button) findViewById(R.id.b5);
        im=(ImageView) findViewById(R.id.im);

        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);
        bt5.setOnClickListener(this);
        
    }

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.b1:
//			AlphaAnimation animation=new AlphaAnimation(0f, 1f);
//			animation.setDuration(2000);
//			im.startAnimation(animation);
			Animation animation=AnimationUtils.loadAnimation(this, R.anim.amalpha);
			im.startAnimation(animation);
			break;

		case R.id.b2:
//			RotateAnimation  animation2=new RotateAnimation(0,360);
//			RotateAnimation animation2=new RotateAnimation(0, 360, 200, 200);
//			RotateAnimation animation2 =new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF,0.5f);
//			animation2.setDuration(2000);
//			im.startAnimation(animation2);
			
			Animation animation2=AnimationUtils.loadAnimation(this, R.anim.roanimation);
			im.startAnimation(animation2);
			break;
			
		case R.id.b3:
//			ScaleAnimation animation3 =new ScaleAnimation(0f, 2f, 0f, 1f);
//			animation3.setDuration(2000);
//			im.startAnimation(animation3);
			Animation animation3=AnimationUtils.loadAnimation(this, R.anim.scaleanimation);
			im.startAnimation(animation3);
			break;
			
		case R.id.b4:
			//第一个参数为动画平移相对于图片所在位置x的偏移量,第二个参数为目标地点位置离原来的位置的x偏移量,后面的y同理
//			TranslateAnimation animation4=new TranslateAnimation(-100, 200, -100, 200);
////		RotateAnimation  animation3=new RotateAnimation(0,90);
//			animation4.setDuration(2000);
//			im.startAnimation(animation4);
			Animation animation4=AnimationUtils.loadAnimation(this, R.anim.animationtran);
			im.startAnimation(animation4);
			break;	
			
		case R.id.b5:
			Animation animation5=AnimationUtils.loadAnimation(this, R.anim.set);
			im.startAnimation(animation5);
			break;	
		default:
			break;
		}
		
		
	}

}

  二、 为了简单也可以直接用代码实现,下面是用代码实现淡入淡出的动画:

 

posted @ 2015-08-25 23:33  Lammy  阅读(573)  评论(0编辑  收藏  举报