有时候,在南昌APP开发项目中需要同时执行一些动画。其实这很简单,同时调用start()方法就行了。
但是,如果要像编排舞步那样编排多个动画的执行,事情就没那么简单了。例如,为实现完整的日落景象,太阳落下去之后,天空应该从橘黄色再转为午夜蓝。我们可以使用AnimatorListener,AnimatorListener会让你知道动画什么时候结束。这样,执行完第一个动画,我们就可以接力执行第二个夜空变化的动画。
然而,理论分析很简单,实际去做的话,少不了要准备多个监ting器,这也很麻烦。好在Android还设计了方便又简单的AnimatorSet。下面百恒网络就来带大家了解一下。
首先,如下代码清单所示,删除掉原来的动画启动代码,并添加夜空变化的动画代码。
创建夜空动画(SunsetFragment.java)
private void startAnimation() {
...
sunsetSkyAnimator.setEvaluator(new ArgbEvaluator());
ObjectAnimator nightSkyAnimator = ObjectAnimator
.ofInt(mSkyView, "backgroundColor", mSunsetSkyColor, mNightSkyColor)
.setDuration(1500);
nightSkyAnimator.setEvaluator(new ArgbEvaluator());
heightAnimator.start();
sunsetSkyAnimator.start();
}
然后,创建并执行一个动画集,如下代码清单所示。
创建动画集(SunsetFragment.java)
private void startAnimation() {
...
ObjectAnimator nightSkyAnimator = ObjectAnimator
.ofInt(mSkyView, "backgroundColor", mSunsetSkyColor, mNightSkyColor)
.setDuration(1500);
nightSkyAnimator.setEvaluator(new ArgbEvaluator());
AnimatorSet animatorSet = new AnimatorSet();
animatorSet
.play(heightAnimator)
.with(sunsetSkyAnimator)
.before(nightSkyAnimator);
animatorSet.start();
}
说白了,AnimatorSet就是可以放在一起执行的动画集。可以用好几种方式创建动画集,但使用上述代码中的play(Animator)方法更容易。
调用play(Animator)方法之前,要先创建一个AnimatorSet.Builder对象,然后利用它创建链式方法调用。传入play(Animator)方法的Animator是链首。所以,以上代码中的链式调用就可以这样解读:协同执行heightAnimator和sunsetSkyAnimator动画;在nightSkyAnimator之前执行heightAnimator动画。在实际南昌APP开发中,可能会用到更复杂的动画集。这也没问题,需要的话,可以多次调用play(Animator)方法。
再次运行Sunset应用,就可以欣赏这美丽的动画了。