属性动画

转载请注明出处:http://blog.csdn.net/wei_chong_chong/article/details/50820558


这次我们来学习一下属性动画

这里你可以学到:

实现Animation框架的功能

属性动画常用属性

动画的监听事件


这里我采用逐步优化的方式学习使用属性动画的各种操作(你可以对比各种方法的优缺点)

属性动画改变的是对象的属性,只要对象某个的属性有get和setf方法就可以对这个属性进行属性动画

先看一个简单的例子吧:

这里我在布局文件中添加了一个ImageView的控件和一个Button控件

我对ImageView添加动画效果

点击Button按钮显示动画效果

public class MainActivity extends Activity {

	private Button mbutton ;
	private ImageView mImageView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mbutton = (Button) findViewById(R.id.start);
		mImageView = (ImageView) findViewById(R.id.mImageView);
		mbutton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//参数含义1.操作的对象  2.Y轴平移的偏离量属性3.初始位置 4.移动后的位置
				//setDuration(1000)是移动的时间
				ObjectAnimator.ofFloat(mImageView, "translationY", 0F,500F).setDuration(3000).start(); 
				//X轴平移
				ObjectAnimator.ofFloat(mImageView,"translationX",0,500F).setDuration(3000).start();
				//旋转360度
				ObjectAnimator.ofFloat(mImageView,"rotation",0,360F).setDuration(3000).start();


			}
		});
	}
}


ObjectAnimator.ofFloat(mImageView, "translationY", 100F,500F).setDuration(1000).start(); 
//参数含义1.操作的对象  2.Y轴平移的属性 3.初始位置 4.移动后的位置

属性动画的移动是异步进行的,

//setDuration(1000)是移动的时间


多种属性动画效果同时进行:

方法一:

ObjectAnimator.ofFloat(mImageView, "translationY", 0F,500F).setDuration(3000).start(); 
				//X轴平移
				ObjectAnimator.ofFloat(mImageView,"translationX",0,500F).setDuration(3000).start();
				//旋转360度
				ObjectAnimator.ofFloat(mImageView,"rotation",0,360F).setDuration(3000).start();

优化:谷歌对多个属性动画同时运行进行了性能上的优化,即使用PropertyValuesHolder类控制,使占用更少的系统资源,如下所示

方法二

	PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation",0,360F);
				PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationX",0,500F);
				PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat( "translationY", 0F,500F);

				ObjectAnimator.ofPropertyValuesHolder(mImageView,p1,p2,p3).setDuration(3000).start();

为了使动画有更丰富的效果可以使用动画集合

方法三

ObjectAnimator animator1 = ObjectAnimator.ofFloat(mImageView, "translationY", 0F,500F);
				ObjectAnimator animator2 = ObjectAnimator.ofFloat(mImageView,"translationX",0,500F);
				ObjectAnimator animator3 = ObjectAnimator.ofFloat(mImageView,"rotation",0,360F);
				AnimatorSet set = new AnimatorSet();
				set.playTogether(animator1,animator2,animator3);
				set.setDuration(3000);
				set.start();

更丰富的效果:

效果一:按顺序执行动画先Y轴平移,然后X轴平移,最后旋转

使用集合的set.playSequentially(animator1,animator2,animator3);方法就行了

set.playTogether(animator1,animator2,animator3);//同时进行
set.playSequentially(animator1,animator2,animator3);//依次进行

效果二:X,Y轴平移同时进行,执行完之后再旋转

	set.play(animator1).with(animator2);
	set.play(animator3).after(animator2);//或者<span style="white-space:pre">	</span>set.play(animator3).with(animator1);
<span style="white-space:pre">				</span>

今天先写这么多吧。不知道为啥在我的真机上模拟不出来效果



你可能感兴趣的:(属性动画)