? ? ? ?有時候,在南昌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就是可以放在一起執行的動畫集??梢杂煤脦追N方式創建動畫集,但使用上述代碼中的play(Animator)方法更容易。
? ? ? ?調用play(Animator)方法之前,要先創建一個AnimatorSet.Builder對象,然后利用它創建鏈式方法調用。傳入play(Animator)方法的Animator是鏈首。所以,以上代碼中的鏈式調用就可以這樣解讀:協同執行heightAnimator和sunsetSkyAnimator動畫;在nightSkyAnimator之前執行heightAnimator動畫。在實際南昌APP開發中,可能會用到更復雜的動畫集。這也沒問題,需要的話,可以多次調用play(Animator)方法。
? ? ? ?再次運行Sunset應用,就可以欣賞這美麗的動畫了。