2010-11-06 13 views
5

मुझे एंड्रॉइड में एनीमेशन हटाने योग्य एक आम समस्या है। जब गतिविधि शुरू होती है, तो मैं एनीमेशन शुरू करना चाहता था, ऑनक्रेट() विधि में, लेकिन जैसा कि कई लोगों ने पाया है, यह काम नहीं करता है।एंड्रॉइड समस्या में एनीमेशन हटाने योग्य

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

मैंने इसे क्रिएट() में एक अलग थ्रेड में शुरू करने का प्रयास किया लेकिन यह या तो काम नहीं करता है। मैं यहाँ पढ़ें:

http://code.google.com/p/android/issues/detail?id=1818

लेकिन सलाह से कोई भी काम, या मैं इसे नहीं समझ सके।

किसी की मदद कर सकते हैं?

उत्तर

0

आपके द्वारा प्रदान किए गए लिंक के मुताबिक आपको एनीमेशन को एक अलग थ्रेड में शुरू करना होगा। जावा में आप अगर आप एक नया वर्ग को लागू नहीं करना चाहती है कि Runnable इंटरफेस को लागू करने से और

Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable 
t.start(); 

साथ इसे शुरू आप भी इस

new Thread(new Runnable() { 
    public void run(){ 
     // some code that runs outside the ui thread. 
    } 
}).start(); 

की तरह कोड लिख सकते हैं करते हैं। उत्तरार्द्ध निश्चित रूप से सुंदर नहीं है लेकिन यदि आप एक छोटी परियोजना बना रहे हैं तो यह जानना अच्छा लगेगा।

क्या आपने इसे इस तरह से आजमाया है या आपने अपना धागा किसी अन्य तरीके से शुरू किया है?

कृपया Painless Threading भी पढ़ें जो यूई थ्रेड के बाहर की कार्रवाइयों को करने के लिए आपको क्या संभावनाएं हैं और अपने धागे से यूई थ्रेड पर चलने वाली विधियों को कैसे पोस्ट करें।


संपादित करें: लिंक आप पोस्ट आप अपने धागा शुरू करने से पहले थोड़ी देर प्रतीक्षा करने के लिए, onCreate पूरा हो गया है शायद जब तक है समीक्षा करने के बाद। the flowchart on this page के अनुसार आप बाद में अपनी एनीमेशन शुरू करने में सक्षम होना चाहिए, उदाहरण के लिए ऑनस्यूम कॉल में। क्या आपने इसे क्रिएट के बाद बुलाए गए तरीके से शुरू करने का प्रयास किया है?

आपको केवल चीजों को बनाने के लिए बनाना चाहिए, और उन्हें स्टार्ट या ऑन्यूज़ में "शुरू करें"।

3

मैं OnCreate() और onResume() के बजाय इसी तरह की समस्याओं का सामना करना पड़ा है, और onWindowFocusChanged (अधिभावी में स्विच):

public void onWindowFocusChanged(boolean hasFocus) 
{ 
    if (hasFocus) 
    { 
     animation.start(); 
    } 
    else 
    { 
     animation.stop(); 
    } 
} 
+0

यह काम करता है में src स्थापित करने के लिए, लेकिन मुझे लगता है कि यह ज्यादातर लोगों को वे क्या चाहते हैं करने के लिए पर्याप्त नियंत्रण नहीं देगा; उदाहरण के लिए एक कार्य शुरू करने से पहले एक एनीमेशन शुरू करने और बाद में इसे रोकने के लिए। –

+0

यह काम करता है, लेकिन मुझे पता चला कि अगर मैं 'WindowFocusChanged (true) 'से पहले 'animation.start()' को कॉल करता हूं और बाद में फिर से' एनीमेशन 'कहता हूं।शुरू करें() 'के भीतर से 'विन्डोफोकस चेंज (सत्य)' तो एनीमेशन शुरू नहीं होगा! तो मुझे क्या करना है यूआई राज्य को ट्रैक करना है। तो वैडेन के 'अगर (हैसफोकस) के भीतर' मैंने एक सदस्य चर 'isVisible = true;' सेट किया है और सभी बाद के 'एनीमेशन। स्टार्ट()' पहले 'isVisible == true' के लिए जांचें। विभिन्न एनीमेशन को ऑटोस्टार्ट करते समय यह एक * प्रमुख * पिटा है। –

1

मुझे लगता है कि आप प्रश्न में देखने के प्रारंभ के बाद एनीमेशन शुरू कर दिया है पूरा है। आप इस तरह कुछ करने के लिए सक्षम होना चाहिए:

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1); 
tweenImage.setBackgroundResource(R.anim.cubicfacetween);  
tweenImage.post(new Runnable() { 
    @Override 
    public void run() { 
     AnimationDrawable frameAnimation = 
      (AnimationDrawable) tweenImage.getBackground(); 
     frameAnimation.start(); 
    } 
} 

imageView

((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() { 
      @Override 
      public void run() { 
       AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable(); 
       drawable.start(); 
      } 
     }); 
+0

यह नेक्सस 4, नेक्सस 5, और पुरानी सोनी एरिक्सन 2.3 पर चल रहा था, लेकिन यह एचटीसी वन वी पर चल रहा था 4.03 ... कोई विचार? एनिमेटेड दृश्य जो ड्रॉ नहीं करता है ... अगर मैं एनीमेशन को रंग से बदलता हूं तो दृश्य ठीक दिखाई देता है। – Stephen

+0

कोड स्निपेट पोस्ट करें। –

+0

पृष्ठभूमि संपत्ति में एनीमेशन.एक्सएमएल या ImageView की src property में सेट करने के बीच अंतर करके हल किया गया समस्या। –

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