转载请注明出处: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 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>