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