首页 > 代码库 > Android 一般动画animation和属性动画animator

Android 一般动画animation和属性动画animator

package com.example.animation;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	
	}
    
	public void click(View view){
		Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
	} 
	
	public void move(View view ){
		float fromXDelta=0;
		float toXDelta=0;
		float fromYDelta=0;
		float toYDelta=200;
		TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
		/**
		 * time
		 */
		animation.setDuration(1000);
		animation.setFillAfter(true);
		ImageView imageView=(ImageView)findViewById(R.id.imageView);
		imageView.startAnimation(animation);
	}
     
}

这是一般动画,再看属性动画

区别:一般动画变换后只是图片移动了,view的位置不变,然而属性动画view随着图片移动。

	public void move(View view ){

		ImageView imageView=(ImageView)findViewById(R.id.imageView);
		ObjectAnimator.ofFloat(imageView, "translationY", 0f,200f).setDuration(1000).start();
	}

多种动画同时进行

	public void move(View view ){

		ImageView imageView=(ImageView)findViewById(R.id.imageView);
		ObjectAnimator.ofFloat(imageView, "translationY", 0f,200f).setDuration(1000).start();
		ObjectAnimator.ofFloat(imageView, "translationX", 0f,200f).setDuration(1000).start();
		ObjectAnimator.ofFloat(imageView, "rotation", 0,360f).setDuration(1000).start();
	}
Google提供了一种更节省系统资源的多种动画同时播放

	public void move(View view ){

		ImageView imageView=(ImageView)findViewById(R.id.imageView);

		PropertyValuesHolder p1=PropertyValuesHolder.ofFloat("rotation", 0,360f);
		PropertyValuesHolder p2=PropertyValuesHolder.ofFloat("translationX", 0f,200f);
		PropertyValuesHolder p3=PropertyValuesHolder.ofFloat("translationY", 0f,200f);
		ObjectAnimator.ofPropertyValuesHolder(imageView, p1,p2,p3).setDuration(1000).start();
	}
同时Google提供了animatorset,允许多种不同动画按照用户要求播放,如使用set.palyTpgether()   set.playSequentially()

	public void move(View view ){

		ImageView imageView=(ImageView)findViewById(R.id.imageView);


		ObjectAnimator animator1=ObjectAnimator.ofFloat(imageView, "rotation", 0,360f);
		ObjectAnimator animator2=ObjectAnimator.ofFloat(imageView, "translationX", 0,200f);
		ObjectAnimator animator3=ObjectAnimator.ofFloat(imageView, "translationY", 0,200f);
	
		AnimatorSet set=new AnimatorSet();
		//set.playTogether(animator1,animator2,animator3);
		set.playSequentially(animator1,animator2,animator3);
		set.setDuration(1000);
		set.start();
	}





Android 一般动画animation和属性动画animator