2016-12-14 25 views
1

我試圖連續播放幾個動畫。這些動畫將是簡單的變換(移動圖像瀏覽一定距離)或更復雜的幀動畫。如何使用xml中定義的動畫加載AnimatorSet

在研究這個問題時,AnimatorSet似乎是一個很好的解決方案。它允許您創建一個要播放的動畫隊列,然後以特定的順序執行它們。

// defining an example animation 
    Animator anim = ObjectAnimator.ofFloat(v, "alpha", 0f) 
      .setDuration(100); 
    AnimatorSet set = new AnimatorSet(); 

    // dictating the order in which the animations will be played 
    set.playSequentially(anim, skewAnim, wobbleAnim); 

    set.start(); 

的問題是,據我所知,你不能定義Animator對象,放在AnimatorSet從在XML文件中定義的動畫。

此外,AnimationSet(注意不同的名稱)只允許您一次播放多個動畫,所以這個類不適合我的目的。

有沒有人知道從項目中的xml對象定義Animator對象的方法?另外,是否還有另一種方法可以完全演奏一系列動畫?

UPDATE:

AnimatorSet set = new AnimatorSet(); 
    Animator anim1 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample); 
    anim1.setTarget(myView1); 
    Animator anim2 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample); 
    anim2.setTarget(myView2); 

    anim1.setDuration(3000); 
    anim2.setDuration(3000); 

    anim1.setInterpolator(new CycleInterpolator(5)); 
    anim2.setInterpolator(new CycleInterpolator(5)); 

    set.playSequentially(anim1,anim2); 
    set.start(); 

回答

2

要動畫加載到AnimatorSet從XML,你的XML應該包含AnimatorObjects而不是動畫。然後你可以使用AnimatorInflater那些animatorObjects加載到您的AnimatorSet這樣的:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample); 

XML想是這樣的:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially" 
    > 

    <objectAnimator 
     android:propertyName="alpha" 
     android:duration="500" 
     android:valueTo="1f" 
     /> 
    <objectAnimator 
    android:propertyName="y" 
    android:duration="500" 
    android:valueTo="300" 
    android:valueType="intType"/> 
</set> 

AnimatorInflater

請參閱此鏈接瞭解更多細節要在不同視圖上播放順序動畫,可以使用AnimationListeners。

anim1.addListener(new Animator.AnimatorListener() { 
          @Override 
          public void onAnimationStart(Animator animation) { 

          } 

          @Override 
          public void onAnimationEnd(Animator animation) { 
          // start anim2 from here 
          } 

          @Override 
          public void onAnimationCancel(Animator animation) { 

          } 

          @Override 
          public void onAnimationRepeat(Animator animation) { 

          }}); 
+0

謝謝Ravinder。你有什麼想法,爲什麼我的動畫師不會按照預期播放動畫? (請參閱上面的編輯) – Dportology

+0

如果您將多個動畫器對象提供給單個xml,並按照上面提到的方式使用它創建AnimatorSet,那麼將根據xml文件中的排序規範來播放這些動畫。但從上面更新我可以看到,你不想在不同的視圖上播放順序動畫,因爲你需要動畫監聽器,檢查我的答案 –

相關問題