(一)、使用AnimatorSet实现动画集
之前我们研究的都是一个动画一个动画的单独播放,而在很多时候,我么需要将几个动画,以某种逻辑顺序来执行。我们可以用AnimatorSet来组合各种各样的动画。
首先我们先来看这样一个动画:
这个动画集由{下落动画,改变背景颜色动画,改变字体颜色动画}组成的。他们是同时执行的
布局文件如下:
MainActiity如下:
public class MainActivity extends Activity {
private Button mBrick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mBrick=(Button) findViewById(R.id.my_brick);
mBrick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//砖块下落的动画
ObjectAnimator drop = ObjectAnimator.ofFloat(mBrick, "Y",0.0f,500.0f);
drop.setDuration(3000);
drop.setInterpolator(new BounceInterpolator());
//改变砖块颜色的动画,"backgroundColor"这个属性是在View中的
//Button继承自TextView继承自View,View中有对这个属性的setter/getter方法
ObjectAnimator backGroundColor = ObjectAnimator.ofObject(mBrick, "backgroundColor",new ArgbEvaluator(), 0xccee4400,0xcc000000);
backGroundColor.setDuration(3000);
//改变字体颜色的动画,"textColor"这个属性是TextView中的
//Button继承自TextView,TextView中有对这个属性的setter/getter方法
ObjectAnimator textColor = ObjectAnimator.ofObject(mBrick, "textColor", new ArgbEvaluator(), 0xff000000,0xffffffff);
textColor.setDuration(3000);
//新建一个AnimatorSet实例
AnimatorSet set = new AnimatorSet();
//将这3个动画一起执行
set.playTogether(drop,backGroundColor,textColor);
//启动这个动画集
set.start();
}
});
}
}
我们还可以这样写:
//将这3个动画一起执行
set.play(drop).with(backGroundColor).with(textColor);
如果是同时执行的动画,我们这样写在一行是没有问题的,但是谷歌并不推荐我们这样写,因为一个动画集中可能还会牵扯到谁先执行,谁后执行,before,after什么的。如果都写在一行,首先系统是分辨不出到底谁先谁后的,其次我们自己也会乱的。所以我们应该分行写