2011-07-01 11 views
7

निर्धारित और अनिश्चित के बीच टॉगलिंग मैं स्ट्रीमिंग मीडिया की स्थिति प्रदर्शित करने के लिए दो मोड के बीच SeekBar टॉगल करने का प्रयास कर रहा हूं।क्षैतिज प्रगतिबार:

मैं स्थापित कर लिया है कि सही ग्राफिक्स दिखाने जब एक्सएमएल में android:indeterminate टैग को परिभाषित:

<SeekBar 
    android:id="@+id/seekBar1" 
    android:indeterminate="false" 
    android:progressDrawable="@android:drawable/progress_horizontal" 
    android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
    android:indeterminateBehavior="cycle" 
    android:indeterminateOnly="false" 
    android:progress="33" 
    android:secondaryProgress="66" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"></SeekBar> 

example

मुसीबत है, जब setIndeterminate(true) फोन करके स्विच करने का प्रयास, ड्रॉएबल नहीं है ठीक से बदलने के लिए प्रतीत होता है। अनिश्चित के मामले में-> निर्धारित करें, एनीमेशन बंद हो जाता है, और निर्धारण से-> अनिश्चित, कुछ भी नहीं होता है।

मैं क्या गलत कर रहा हूं?

उत्तर

1

SeekBar onSizeChanged() केवल वर्तमान चयनित पृष्ठभूमि को शुरू करने योग्य बनाता है, और इसे एक बार कहा जाता है जब सेकबार प्रारंभ होता है। तो एक से ठीक कर सकते:

public class CorrectedSeekBar extends SeekBar { 

    public CorrectedSeekBar(Context context) { 
     super(context); 
    } 

    public CorrectedSeekBar(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CorrectedSeekBar(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     boolean current = isIndeterminate(); 
     setIndeterminate(!current); 
     super.onSizeChanged(w, h, oldw, oldh); 
     setIndeterminate(current); 
     super.onSizeChanged(w, h, oldw, oldh); 
    } 

} 

और लेआउट एक्सएमएल में उपयोग <yourpackage.CorrectedSeekBar ...

यह does not अच्छे लग रहे हैं, अन्य समाधान संभव हो सकता है लेकिन मुझे लगता है यह मुख्य समस्या है (बग?)।

0

वैसे इसके बजाय पीडी को अनिश्चितता में सेट करना बस अपनी पृष्ठभूमि स्विच करें। यदि आप खींचने योग्य एनिमेशन चाहते हैं तो मैं यहां ट्रांजिशन ड्राउबल को देखने का सुझाव देता हूं: TransitionDrawable। इसलिए इसका उपयोग वास्तव में 2 अलग-अलग ड्रॉबल्स जोड़ना और उनके संक्रमण को एनिमेट करना है। मुझे लगता है कि आपके मामले के लिए काम करना चाहिए। लेकिन मुझे प्रगति संवाद पर ऐसा कुछ करने का अनुभव नहीं है, इसलिए मैं वास्तव में बता नहीं सकता।

+0

हाय, धन्यवाद

जब भी आप सेट करना चाहते हैं। यही वह नहीं है जिसके लिए मैं जा रहा हूं; यह एक गन्दा हैक की तरह लगता है। पृष्ठभूमि सेट करना काम नहीं करेगा, क्योंकि पृष्ठभूमि ऊपर की तस्वीर में काला क्षेत्र है। एक संक्रमण ड्रॉबल * काम * के साथ बार के स्वयं को निष्क्रिय करने योग्य निष्क्रिय स्थिति को बदलना, लेकिन फिर मुझे प्राथमिक और माध्यमिक प्रगति 0 पर सेट करना होगा, फिर संक्रमण को खींचने योग्य ट्रिगर करें। यह अनिवार्य रूप से जटिल है - अगर मुझे ऐसा करना पड़ा, तो मैं बस दो seekbars, और एक व्यूफ्लिपर का उपयोग कर सकता हूं। –

+0

अच्छी तरह से पृष्ठभूमि के साथ मेरा क्या मतलब है वास्तव में प्रगति बार शैली बदल रहा है, हां प्राथमिक और माध्यमिक प्रगति drawables। आप जो कुछ भी चाहते हैं उसके आधार पर आप रनटाइम में उन डायनैमिक रूप से सेट कर सकते हैं, और संक्रमण के लिए मुझे लगता है कि मुझे लगता है कि व्यूफ्लिपर से जाने का बेहतर तरीका है, और इस तरह के ड्रॉइंग संसाधन को कोड की 10 से अधिक लाइनों की आवश्यकता नहीं होगी, इसलिए मुझे नहीं लगता यह वास्तव में जटिल है। यह 2 प्रगति पट्टी से काफी आसान है और उन लोगों का ट्रैक रखता है। – DArkO

+0

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

2

मुझे एक ही समस्या है और मैंने इसे रीफ्रेश करने के लिए postInvalidate() को कॉल करके हल किया है। मैं एंड्रॉइड 2.3.4 पर हूं।

// Configure the SeekBar 
seekBar.setIndeterminate(true); 
seekBar.postInvalidate(); 
0

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

progressBar.setIndeterminate(true); 

उपयोग: उत्तर के लिए

this.progressBar.post(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progressBar.setIndeterminate(true); 
    } 
}); 
संबंधित मुद्दे