2011-06-04 16 views
7

सेट करने के लिए मुझे माध्यमिक प्रगति बार रंग प्रोग्रामेटिक रूप से सेट करने की आवश्यकता है।एंड्रॉइड प्रोग्रेसबार: माध्यमिक रंग प्रोग्रामेटिक रूप से

मैं केवल विधि

ProgressBar.setProgressDrawable(drawable) 
प्राथमिक रंग सेट के लिए

देखते हैं, लेकिन वहाँ माध्यमिक रंग सेट के लिए एक विधि नहीं है।

मैं इसे कैसे कर सकता हूं?

+1

मिशेल, यू समाधान कर रहे हैं? मैं इस समस्या के साथ भी अटक गया हूं :( – Peter

+0

@ पीटर मेरा उत्तर नीचे देखें। – Michele

उत्तर

2

setProgressDrawable का उपयोग करके आपके द्वारा निर्दिष्ट ड्रायबल में पृष्ठभूमि, प्राथमिक और द्वितीयक drawables हैं।

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape> 
      <corners android:radius="5dip" /> 
      <gradient ... /> 
     </shape> 
    </item> 

    <item android:id="@android:id/secondaryProgress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient .../> 
      </shape> 
     </clip> 
    </item> 

    <item android:id="@android:id/progress"> 
     <clip> 
      <shape> 
       <corners android:radius="5dip" /> 
       <gradient ... /> 
      </shape> 
     </clip> 
    </item> 

</layer-list> 
+0

हाय, उत्तर के लिए धन्यवाद। लेकिन मुझे इसे जावा के साथ xml के साथ नहीं करना चाहिए। – Michele

+0

मैं भी जावा में करना चाहता था, लेकिन दो एक्सएमएल फाइलें बनाना चाहता था (या आपकी जरूरतों को और अधिक दिया गया है) और जिस व्यक्ति को आप चाहते थे उसे चुनना इतना आसान, तेज़ और साफ है, मैं इस विधि से फंस गया। –

4

ProgressBar.getProgressDrawable() देता है जिसमें एक LayerDrawable:

LayerDrawable progressDrawable = (LayerDrawable) getProgressDrawable(); 
Drawable backgroundColor = progressDrawable.getDrawable(0); 
Drawable secondaryColor = progressDrawable.getDrawable(1); 
Drawable primaryColor = progressDrawable.getDrawable(2); 

मैं रंग तिनका (उदाहरण) को संशोधित करने का प्रयास करें:

progressDrawable.setDrawableByLayerId(progressDrawable.getId(2), new ClipDrawable(...)); 

लेकिन यहाँ एक example of ProgressBar drawable कि एंड्रॉयड के साथ भेज दिया है कभी-कभी स्क्रीन फ्रीज, कभी-कभी दुर्घटनाग्रस्त हो जाती है। अंततः मैंने समय की कमी के लिए खोज छोड़ दी। क्षमा करें :(

मिशेल

+0

बिल्कुल मुझे जो चाहिए था। यह कमाल है! – reidisaki

2

शायद मिशेल के लिए प्रासंगिक नहीं है, लेकिन शायद यह किसी और में मदद मिलेगी ..

ProgressBar progress = (ProgressBar) fullView.findViewById(R.id.main_progressbar); 
LayerDrawable progressDrawable = (LayerDrawable)progress.getProgressDrawable(); 
Drawable drawable = activity.getResources().getDrawable(R.drawable.WHATEVER_YOU_WANT); 
ClipDrawable cd = new ClipDrawable(drawable, Gravity.LEFT,ClipDrawable.HORIZONTAL); 
progressDrawable.setDrawableByLayerId(android.R.id.progress, cd); 
0

चेक इस

आप को इस तरह एक drawable एक्सएमएल उपयोग कर सकते हैं सेट प्रगतिशील

<item android:id="@android:id/background" 
    android:drawable="@drawable/progress_bar_nor">  
</item>  
<item android:id="@android:id/secondaryProgress" 
    android:drawable="@drawable/progress_bar_nor">  
</item> 
<item 
    android:id="@android:id/progress" 
    android:drawable="@drawable/progress_bar_sel"/> 

इस लिंक का संदर्भ लें

https://stackoverflow.com/a/27144594/1554031

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