? ? ? ?有時候,在南昌APP開發(fā)項目中需要同時執(zhí)行一些動畫。其實這很簡單,同時調(diào)用start()方法就行了。
? ? ? ?但是,如果要像編排舞步那樣編排多個動畫的執(zhí)行,事情就沒那么簡單了。例如,為實現(xiàn)完整的日落景象,太陽落下去之后,天空應(yīng)該從橘黃色再轉(zhuǎn)為午夜藍。我們可以使用AnimatorListener,AnimatorListener會讓你知道動畫什么時候結(jié)束。這樣,執(zhí)行完第一個動畫,我們就可以接力執(zhí)行第二個夜空變化的動畫。
? ? ? ?然而,理論分析很簡單,實際去做的話,少不了要準備多個監(jiān)ting器,這也很麻煩。好在Android還設(shè)計了方便又簡單的AnimatorSet。下面百恒網(wǎng)絡(luò)就來帶大家了解一下。
? ? ? ?首先,如下代碼清單所示,刪除掉原來的動畫啟動代碼,并添加夜空變化的動畫代碼。
? ? ? ?創(chuàng)建夜空動畫(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();
? ? ? ?}
? ? ? ?然后,創(chuàng)建并執(zhí)行一個動畫集,如下代碼清單所示。
? ? ? ?創(chuàng)建動畫集(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就是可以放在一起執(zhí)行的動畫集。可以用好幾種方式創(chuàng)建動畫集,但使用上述代碼中的play(Animator)方法更容易。
? ? ? ?調(diào)用play(Animator)方法之前,要先創(chuàng)建一個AnimatorSet.Builder對象,然后利用它創(chuàng)建鏈式方法調(diào)用。傳入play(Animator)方法的Animator是鏈首。所以,以上代碼中的鏈式調(diào)用就可以這樣解讀:協(xié)同執(zhí)行heightAnimator和sunsetSkyAnimator動畫;在nightSkyAnimator之前執(zhí)行heightAnimator動畫。在實際南昌APP開發(fā)中,可能會用到更復雜的動畫集。這也沒問題,需要的話,可以多次調(diào)用play(Animator)方法。
? ? ? ?再次運行Sunset應(yīng)用,就可以欣賞這美麗的動畫了。