इस प्रश्न को हल करने के 3 तरीके हैं:
- उत्तरोत्तर रंग को क्रमिक रूप से कैसे समायोजित किया जाए
- क्रमिक रूप से क्रमिक रंग को कैसे समायोजित करें, लेकिन संकलन-समय से पहले घोषित विभिन्न पूर्वनिर्धारित रंगों से रंग चुनें
- क्रमिक रूप से क्रमिक रंग को कैसे समायोजित करें, और प्रोग्राम को रंग भी बनाएं।
विशेष रूप से # 2 और # 3 के आसपास बहुत भ्रम है, जैसा कि टिप्पणी में amfcosta के उत्तर में देखा गया है। यह उत्तर आपको अप्रत्याशित रंग परिणाम देगा, जब भी आप प्राथमिक रंगों को छोड़कर किसी भी प्रगति पट्टी को सेट करना चाहेंगे, क्योंकि यह केवल पृष्ठभूमि रंग को संशोधित करता है, और वास्तविक प्रगति बार "क्लिप" क्षेत्र अभी भी कम अपारदर्शिता के साथ एक पीला ओवरले होगा। उदाहरण के लिए, पृष्ठभूमि को गहरे बैंगनी में सेट करने के लिए उस पद्धति का उपयोग करने से कुछ बैंगनी गुलाबी रंग का एक प्रगति बार "क्लिप" रंग हो जाएगा, जिसके परिणामस्वरूप कम बैंगनी के माध्यम से गहरे बैंगनी और पीले रंग का मिश्रण होता है।
तो किसी भी तरह, # 1 का जवाब पूरी तरह से रयान द्वारा दिया जाता है और answerstarke # 3 के अधिकांश उत्तर देता है, लेकिन # 2 और # 3 के लिए एक पूर्ण समाधान की तलाश करने वालों के लिए:
क्रमिक रूप से क्रमिक रंग को कैसे समायोजित करें, लेकिन XML में घोषित पूर्व निर्धारित रंग से रंग चुनें
res / drawable / my_progressbar.xml :
यह फ़ाइल बनाएं लेकिन my_progress और my_secondsProgress में रंग बदलें:
(नोट: यह केवल डिफ़ॉल्ट XML एसडीके प्रोग्रेसबेर को परिभाषित करने वाली वास्तविक XML फ़ाइल की एक प्रति है, लेकिन मैंने आईडी और रंग बदल दिए हैं। मूल का नाम प्रगति_होर्सेज़ है)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/my_progress_background">
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>
<item android:id="@+id/my_secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ff171d"
android:centerColor="#80ff1315"
android:centerY="0.75"
android:endColor="#a0ff0208"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@+id/my_progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#7d2afdff"
android:centerColor="#ff2afdff"
android:centerY="0.75"
android:endColor="#ff22b9ba"
android:angle="270"
/>
</shape>
</clip>
</item>
आपके जावा में :
final Drawable drawable;
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < 16) {
drawable = ctx.getResources().getDrawable(R.drawable.my_progressbar);
} else {
drawable = ContextCompat.getDrawable(ctx, R.drawable.my_progressbar);
}
progressBar.setProgressDrawable(drawable)
क्रमिक रूप से क्रमिक रंग को कैसे समायोजित करें, और प्रोग्राम को रंग भी बनाएं
संपादित करें: मुझे इसे ठीक से हल करने का समय मिला। मेरे पूर्व उत्तर ने इसे थोड़ा अस्पष्ट बना दिया।
एक ProgressBar एक LayerDrawable में 3 ड्राबल्स के रूप में बना है।
- परत 1 पृष्ठभूमि है
- परत 2 माध्यमिक प्रगति रंग है
- परत 3 मुख्य प्रगति पट्टी का रंग है
नीचे दिए गए उदाहरण में मैं मुख्य प्रगति बार का रंग बदलकर सियान रखूंगा।
//Create new ClipDrawable to replace the old one
float pxCornerRadius = viewUtils.convertDpToPixel(5);
final float[] roundedCorners = new float[] { pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius, pxCornerRadius };
ShapeDrawable shpDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null));
shpDrawable.getPaint().setColor(Color.CYAN);
final ClipDrawable newProgressClip = new ClipDrawable(shpDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
//Replace the existing ClipDrawable with this new one
final LayerDrawable layers = (LayerDrawable) progressBar.getProgressDrawable();
layers.setDrawableByLayerId(R.id.my_progress, newProgressClip);
उस उदाहरण ने इसे एक ठोस रंग में बदल दिया। आप इसे बदलकर एक ढाल रंग में सेट कर सकते हैं
shpDrawable.getPaint().setColor(Color.CYAN);
साथ में
Shader shader = new LinearGradient(0, 0, 0, progressBar.getHeight(), Color.WHITE, Color.BLACK, Shader.TileMode.CLAMP);
shpDrawable.getPaint().setShader(shader);
चीयर्स।
-Lance