2010-01-25 12 views
13

से एनीमेशन ड्रावबल लोड करने के लिए कैसे करें मेरे पास कुछ कस्टम क्लास बिटमैपस्टोर है, जो कि किसी भी व्यू या जो कुछ भी नहीं है - एक उपयोगिता है।xml फ़ाइल

<animation-list oneshot="true" > 
    <item drawable="@drawable/frame01" /> 
    <item drawable="@drawable/frame02" /> 
</animation-list> 

मैं (इसलिए यह मेरे लिए सब पार्स करना होगा एक AnimationDrawable संसाधन वर्ग का उपयोग कर के रूप में xml फ़ाइल से एनीमेशन लोड करना चाहते हैं: और मैं born_animation.xml फ़ाइल जो एनीमेशन फ्रेम के साथ < एनीमेशन-सूची > शामिल है), बिटमैप्स निकालें और उन्हें मेरे कस्टम स्टोरेज क्लास में डाल दें।

समस्या मेरे पास है:

Resources res = context.getResources(); 
AnimationDrawable drawable = (AnimationDrawable)res.getDrawable(R.drawable.born_animation); 
assertTrue(drawable != null); <= fails! it's null 

WTF? क्या कोई मुझे समझा सकता है? कोड ठीक संकलित करता है। सभी संसाधन जगह पर हैं। ImageView का उपयोग को पार्स (देव गाइड में वर्णित) की तरह करने के लिए

परिणाम एक ही हैं -

मैं एक और तरीका है की कोशिश की। यह शून्य खींचने योग्य देता है।

किसी भी हिस्ट की बहुत सराहना की जाएगी, अग्रिम धन्यवाद।

+0

इसे पृष्ठभूमि के रूप में सेट न करें - नीचे उदाहरण देखें। –

उत्तर

6

Yay, मैं कारण मिल गया! :)

यह था मेरा बुरा:

  • मैं एंड्रॉयड का उपयोग नहीं किया:: मैं अपने animation.xml फ़ाइल का उचित प्रारूप नहीं किया था विशेषताओं में नाम स्थान (किसी कारण मैं निर्णय लिया के लिए यह नहीं है आवश्यक)
  • मैं नष्ट कर दिया "अवधि" विशेषता < मद में > टैग

बाद मैं इन बातों को res.getDrawable() एक सही AnimationDrawable उदाहरण वापस जाने के लिए शुरू कर दिया तय की।

Resources.NotFoundException पर अधिक सटीक देखने के लिए था और यह getCause है() पता लगाने के लिए कि क्या गलत है :)

26

Drawable

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/myprogress" 
       android:oneshot="false"> 
    <item android:drawable="@drawable/progress1" android:duration="150" /> 
    <item android:drawable="@drawable/progress2" android:duration="150" /> 
    <item android:drawable="@drawable/progress3" android:duration="150" /> 
</animation-list> 

कोड:

ImageView progress = (ImageView)findViewById(R.id.progress_bar); 
if (progress != null) { 
    progress.setVisibility(View.VISIBLE); 
    AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable(); 
    frameAnimation.setCallback(progress); 
    frameAnimation.setVisible(true, true); 
} 

देखें

<ImageView 
    android:id="@+id/progress_bar" 
    android:layout_alignParentRight="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/myprogress" /> 
+0

हम्म। धन्यवाद, लेकिन यह ज्यादातर देव गाइड से कोड है - यह वही नहीं है जो मैं चाहता हूं। असल में इमेज व्यू बनाना कुछ ऐसा है जिसे मुझे जरूरत नहीं है - मैंने इसे एक कामकाज के रूप में करने की कोशिश की। मैं इसे कहीं भी प्रदर्शित नहीं करूंगा। मैं ImageView के बिना ऐसा कैसे कर सकता हूं? मैंने पहले संस्करण का प्रयास क्यों किया (Res.getDrawable() के साथ) काम करने में असफल रहा? – dimsuz

+1

इसके अलावा मैं View.findViewById का उपयोग नहीं कर सकता, क्योंकि मेरे पास कोई दृश्य नहीं है - जैसा कि मैंने कहा है कि यह एक उपयोगिता वर्ग है। कल्पना कीजिए कि मेरे पास एक पुस्तकालय है जो व्यू/गतिविधि के बारे में कुछ नहीं जानता है। क्या यह तब संसाधन लोड नहीं कर सकता है?:) – dimsuz

+0

एक बार पूरा होने के बाद गतिविधि को खत्म करने के लिए चारों ओर रास्ता? – RobinHood

3

यह "xml" निर्देशिका से संसाधनों लोड करने के लिए इस्तेमाल किया जा सकता।

Drawable myDrawable; 
Resources res = getResources(); 
try { 
    myDrawable = Drawable.createFromXml(res, res.getXml(R.xml.my_drawable)); 
} catch (Exception ex) { 
    Log.e("Error", "Exception loading drawable"); 
} 
संबंधित मुद्दे