2013-07-12 2 views
9

क्या एंड्रॉइड एनिमेटरसेट (अनंत) को दोहराने का एक आसान तरीका है। क्या मैं एनीमेशन लिस्टर सेट कर सकता हूं और फिर से शुरू() फिर से कॉल करके एनिमेटरसेट को पुनरारंभ कर सकता हूं?दोहराना एनिमेटरसेट

मेरे एनीमेटरसेट में दो एनिमेशन शामिल हैं जो क्रमशः खेले जाते हैं। तो अगर मैं दोहराने के लिए दोनों एनीमेशन का दोहराव मोड सेट करता हूं, तो पहले रन की तुलना में पहले दोहराया जाएगा, है ना?

उत्तर

0

मेरे सिर से - एनीमेशन ढांचा दर्द का स्रोत है, खासकर यदि आप 2.x का समर्थन करना चाहते हैं। मुझे आमतौर पर किसी भी जटिल कार्य करने की कोशिश करने वाले सेटों में समस्याएं थीं, AnimationListener के प्रकार के "प्लेयर" के साथ ट्रैक रखें। मैं ट्रैक करता हूं कि कौन सी एनीमेशन मैं खेलता हूं (जैसे int इत्यादि) और फिर onAnimationEnd पर मैं एक और शुरू करता हूं जो अनुक्रम में होना चाहिए। इस तरह से मैं आसानी से अपने अनुक्रम को "स्क्रिप्ट" कर सकता हूं, और टूटी हुई ढांचे को परेशान नहीं करता हूं।

+0

हम्म:

सबसे अच्छी बात की तरह कुछ करने के लिए है। हालांकि पूरे एनिमेशन को दोहराने के लिए आपने अपने अंतिम एनीमेशन ऑन एनीमेशन एंड() में क्या किया था। क्या आप बस संपूर्ण एनीमेशन वर्कफ़्लो को दोहराने के लिए पहली एनीमेशन की शुरुआत कर सकते हैं? – sockeqwe

+0

मैंने पहली बार शुरू किया, मेरा वैरिएबल –

11

वहाँ एक एंड्रॉयड AnimatorSet (अनंत) को दोहराने के लिए एक आसान तरीका है पहले दो सवालों

के लिए एक जवाब नहीं है? क्या मैं एनीमेशन लिस्टर सेट कर सकता हूं और फिर से शुरू() फिर से कॉल करके एनिमेटरसेट को पुनरारंभ कर सकता हूं?

हाँ, वहाँ है:

mAnimationSet.addListener(new AnimatorListenerAdapter() { 

    private boolean mCanceled; 

    @Override 
    public void onAnimationStart(Animator animation) { 
    mCanceled = false; 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) { 
    mCanceled = true; 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.start(); 
    } 
    } 

}); 
mAnimationSet.start(); 

तीसरा सवाल के लिए जवाब है, नहीं है। पहली एनीमेशन दोहराया जाएगा और सभी पुनरावृत्ति के बाद सफल एनीमेशन शुरू हो जाएगा।

+2

एनिमेटरसेट और एनीमेशनसेट अलग करना शून्य है। – Anton

-3

इस बारे में कैसे?

@Override 
public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.reset(); //<- added. 
     animation.start(); 
    } 
} 
+1

'एनीमेटर 'के लिए कोई' रीसेट()' विधि नहीं है। –

20

इसे अपने बच्चे ऑब्जेक्ट एनिमेटर्स 'दोहराव मोड और गिनती सेट करें;

objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); 
objectAnimator.setRepeatMode(ObjectAnimator.RESTART/REVERSE...); 

हालांकि, इसे रोकने और रद्द करने में सक्षम नहीं होगा, हालांकि, अभी तक एक और बग के कारण।

स्पष्ट रूप से, मैं असंख्य तरीकों का प्रशंसक नहीं हूं जिसमें आप एंड्रॉइड में चीजों को एनिमेट कर सकते हैं, और वे सभी एक तरह से या दूसरे में विफल हो जाते हैं। उम्मीद है कि यह किसी और की मदद करता है।

-1

तो, उपर्युक्त विकल्पों में से कोई भी उचित नहीं है।

यदि आप का उपयोग करें:

@Override 
    public void onAnimationEnd(Animator animation) { 
    if (!mCanceled) { 
     animation.start(); 
    } 
    } 

आप कभी कभी Stackoverflow अपवाद हो रही खत्म हो जाएगा। मैं कभी इस तरह के एक समस्या थी,

Thread t = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true && getActivity() != null) { 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          set3.start(); 
         } 
        }); 
        SystemClock.sleep(1200); 
       } 
      } 
     }); 
     t.start(); 
संबंधित मुद्दे