2015-02-11 7 views
5

मैं घंटों तक कोशिश कर रहा हूं, मुझे लगता है कि इसे छोड़ने का समय है। मैं xml में परिभाषित एनीमेटरसेट को कैसे लूप कर सकता हूं?एक एनिमेटरसेट एनीमेशन को कई बार दोहराएं

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

    <objectAnimator /> 

    <objectAnimator /> 

    <objectAnimator /> 

    <objectAnimator /> 

</set> 

मैं startOffset, repeatCount और duration एकल objectAnimator रों पर के संयोजन के दर्जनों की कोशिश की, लेकिन वह सिर्फ सही तरीका नहीं है।

मैं this के बारे में होनहार वैकल्पिक हल पढ़ें:

a.addListener(new AnimatorListenerAdapter() { 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     animation.start(); 
     Log.i(); 
    } 
}); 

लेकिन यह सिर्फ काम नहीं करता: onAnimationEnd एक बार कहा जाता है, एनीमेशन दोहराया है, और फिर onAnimationEnd अब और नहीं बुलाया जाता है।

अन्य इसी तरह के सवाल यहाँ गलत जवाब (android.view.animation ढांचे के संदर्भ में) को शामिल या एक ही objectAnimator के लिए एक कस्टम क्षेपक को परिभाषित करने का सुझाव देते हैं, लेकिन वास्तव में मैं क्या देख रहा हूँ नहीं है। धन्यवाद।

उत्तर

3

मुझे AnimatorSet के साथ एक ही समस्या थी जिसने दो एनिमेशन एक साथ खेला।

मैंने animationSet.play(anim1).with(anim2) के साथ सेट बनाया, जिसके परिणामस्वरूप मेरे एनिमेशन केवल एक बार दोहराए गए।

इसे animationSet.play(anim1).with(anim2).after(0) में बदलकर मेरी समस्या का समाधान हुआ और एनीमेशन को अनिश्चित काल तक लूप करने की अनुमति दी गई।

ऐसा लगता है कि एक बग है जो एनीमेशन में कम से कम एक अनुक्रमिक चरण रखने के लिए मजबूर करता है इससे पहले कि एनिमेशन एक से अधिक बार लूप कर सकें।

+0

मेरे पास अब परीक्षण करने का कोई समय नहीं है, मैं आप पर भरोसा करने जा रहा हूं। :-) – natario

0

जब आप एनीमेशन को रिकर्सन के रूप में पुनरारंभ करते हैं तो आप अपनी एनीमेशन में श्रोता नहीं जोड़ रहे हैं। आपको एक एनीमेटर लिस्टनर एडाप्टर ऑब्जेक्ट बनाने की आवश्यकता है, और इसे पुन: उपयोग करें।

आशा है कि मैं आपको कुछ समझ रहा हूं!

+0

मैंने 'एनीमेशन.स्टार्ट()' के बजाय 'a.start()' को कॉल करने का प्रयास किया और मुझे वही व्यवहार मिल रहा था, इसलिए मुझे लगता है कि यह समस्या नहीं है। कोशिश करेंगे! – natario

+0

दुख की बात नहीं करता है। – natario

+0

क्या आप अपना कोड स्निपेट साझा कर सकते हैं .... –

2

मैं बिल्कुल एक ही स्थिति को पूरा करता हूं। लगभग एक दिन के परीक्षण के बाद, मुझे अचानक संदेह है कि मुख्य धागे पर एनिमेटर शुरू किया जाना चाहिए। और यह काम करता है।

mRandomPointAnimatorSet.addListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationStart(Animator animation) { 
      Log.i(TAG, "onAnimationStart"); 
      mRandomPointView.setVisibility(VISIBLE); 
     } 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      Log.i(TAG, "onAnimationEnd"); 
      mRandomPointView.setVisibility(INVISIBLE); 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        if (isShown()) { 
         requestLayout(); 
         mRandomPointAnimatorSet.start(); 
        } 
       } 
      }); 
     } 
    }); 

वर्तमान में मुझे नहीं पता क्यों।

+0

हां भी मेरी समस्या हल हो गई ... –

संबंधित मुद्दे