2012-01-27 13 views
9

में संक्रमण जोड़ें मेरे पास 10 छवियों का एक सेट है, और मैं एक एनीमेशन बनाना चाहता हूं जहां मैं उनके बीच फीका हो। मैं ऐसी चीज प्राप्त करने के लिए अंतर्निहित ड्राइंग में देख रहा हूं, लेकिन उस भाग पर कोई भाग्य नहीं है। एनीमेशन ड्राउबल है, जो चित्रों के बीच स्विच करता है, लेकिन यह स्विच को एनिमेट नहीं करता है। ट्रांजिशन ड्रॉबल है, जो कि दो चित्रों के बीच फीका हुआ है, लेकिन दो से अधिक नहीं।एनीमेशन ड्रॉबल

नरक।

मैंने Google पर कुछ समाधान की तलाश की, लेकिन उस भाग पर कोई भाग्य नहीं था। तो मैं ऐसी चीज प्राप्त करने के लिए अपने स्वयं के चित्रकारी को लागू करने के बारे में सोच रहा हूं। क्या आप में से कोई भी पॉइंटर्स होगा?

अग्रिम धन्यवाद।

उत्तर

15

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

उपयोग:

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

CyclicTransitionDrawable के लिए कोड available on Github है।

+0

खैर मैं भी याद नहीं है कि मैं क्या :-) किया लेकिन अपने समाधान अच्छे और साफ लगता है , तो चलिए इसे उत्तर के रूप में चिह्नित करें! – Redwarp

+0

क्या इसे केवल एक लूप के लिए जाने का कोई तरीका है? – Andy

+0

वर्तमान में लूप की संख्या को सीमित करने का कोई तरीका नहीं है। हालांकि इसे जोड़ा जा सकता है, मुझे लगता है कि (स्मृति से) आप इसे प्राप्त करने के लिए मूल ट्रांजिशन ड्रावेबल क्लास का उपयोग कर सकते हैं। –

10

ठीक है। लंबे समय बीत चुका है, और आपने शायद इस मुद्दे को ठीक किया है, लेकिन आपने एनीमेशन ड्रावेबल के लिए सेट एंटरफेस अवधि() सेट की है। उदाहरण:

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 
इस कोड को आप 1..N चित्रों के माध्यम से एक आसान साइकिल चलाना है साथ

, हर एक एक फीका-इन एनिमेशन के साथ रहता है 5s (5000ms)। अब, मैं क्या कर

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

और AnimationStarterThread वर्ग RelativeLayout मेरी जड़ की पृष्ठभूमि सेट कर रहा है

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
} 
संबंधित मुद्दे