So ändern Sie progress-bar progress-Farbe in Android
-
19-09-2019 - |
Frage
Ich bin mit einem horizontalen Fortschrittsbalken in meiner Android-Anwendung, und ich möchte zu ändern, seine Fortschritte Farbe (die Gelben Standard).Wie kann ich es tun mit code
(nicht XML)?
Lösung
Es tut mir leid, dass es nicht die Antwort ist, aber was die Forderung treibt es von Code-Einstellung?
Und .setProgressDrawable
sollte funktionieren, wenn es richtig definiert ist
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/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="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners
android:radius="5dip" />
<gradient
android:startColor="@color/progress_start"
android:endColor="@color/progress_end"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list>
Andere Tipps
Für eine horizontale ProgressBar können Sie eine ColorFilter
verwenden, auch, wie folgt aus:
progressBar.getProgressDrawable().setColorFilter(
Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
Hinweis: Dies ändert das Aussehen aller Fortschrittsbalken in der App. Um nur eine bestimmte Fortschrittsbalken zu ändern, dies zu tun:
Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(progressDrawable);
Wenn progressBar unbestimmt, dann ist getIndeterminateDrawable()
anstelle von getProgressDrawable()
.
Da Lollipop (API 21) eine Verlaufstönung festlegen:
progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));
Dies ist nicht programmatisch, aber ich denke, es ist auf jeden Fall eine Menge Leute helfen könnte.
Ich habe versucht, eine Menge und die effizienteste Art und Weise war diese Zeilen zu meinem ProgressBar in der XML-Datei hinzuzufügen:
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/secondary"
Also am Ende dieser Code hat es für mich:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:visibility="visible"
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/secondary">
Diese Lösung funktioniert für API 21 +
Für meine unbestimmte progressbar (Spinner) Ich habe gerade einen Farbfilter auf dem ziehbar. Funktioniert prima und nur eine Zeile.
Beispiel, wo Einstellung Farbe auf Rot:
ProgressBar spinner = new android.widget.ProgressBar(
context,
null,
android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);
Dies ist eine alte Frage, aber mit Thema ist hier nicht erwähnt. Wenn Ihr Standard-Theme verwendet AppCompat
, Ihre ProgressBar
die Farbe wird colorAccent
Sie definiert haben.
Ändern colorAccent
wird auch Ihre ProgressBar
die Farbe ändern, aber es ändert spiegelt sich auch an mehreren Stellen. Also, wenn Sie eine andere Farbe wollen einfach nur für einen bestimmten PregressBar
Sie können das tun, indem Thema zu diesem ProgressBar
Anwendung:
-
Erweitern Sie Ihre Standard-Theme und außer Kraft setzen
colorAccent
<style name="AppTheme.WhiteAccent"> <item name="colorAccent">@color/white</item> <!-- Whatever color you want--> </style>
-
Und in
ProgressBar
fügen Sie dasandroid:theme
Attribut:android:theme="@style/AppTheme.WhiteAccent"
So ist es so etwas wie folgt aussehen:
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="10dp"
android:theme="@style/AppTheme.WhiteAccent" />
Sie sind also nur eine colorAccent
für Ihre ProgressBar
ändern.
Hinweis : style
Verwendung wird nicht funktionieren. Sie müssen nur android:theme
verwenden.
Sie können mehr Verwendung Thema finden Sie hier: https://plus.google.com/u/0/ + AndroidDevelopers / posts / JXHKyhsWHAH
Alle API
, wenn die Verwendung alle API erstellen, das Thema in der Art
style.xml
<resources>
//...
<style name="progressBarBlue" parent="@style/Theme.AppCompat">
<item name="colorAccent">@color/blue</item>
</style>
</resources>
und verwenden im Gang
<ProgressBar
...
android:theme="@style/progressBarBlue" />
API-Level 21 und höher
Wenn in API-Ebene verwendet 21 und höher nur diesen Code verwenden:
<ProgressBar
//...
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/secondary"/>
als pro einige der Vorschläge, können Sie eine Form und clipdrawable mit einer Farbe spezifizieren, stellen Sie es dann. Ich habe diese programmatisch zu arbeiten. Dies ist, wie ich es tun ..
Zuerst stellen Sie sicher, die ziehbar Bibliothek importieren ..
import android.graphics.drawable.*;
Verwenden Sie dann den Code wie unten;
ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);
Das funktioniert für mich:
<ProgressBar
android:indeterminateTint="#d60909"
... />
Wenn Indeterminate:
((ProgressBar)findViewById(R.id.progressBar))
.getIndeterminateDrawable()
.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);
Heute im Jahr 2016 fand ich einige Pre-Lollipop-Geräte nicht die colorAccent
Einstellung ehren, so dass meine endgültige Lösung für alle APIs ist nun folgend:
// fixes pre-Lollipop progressBar indeterminateDrawable tinting
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}
Für Bonuspunkte, spielt es keine veralteten Code verwenden. Versuchen Sie es!
Dies ist, was ich tat. Arbeitete.
ProgressBar:
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="4"
android:indeterminateDrawable="@drawable/progressdrawable"
/>
progressdrawable.xml:
verwenden Hier Gradienten Farbe zu ändern, wie Sie möchten. Und android: toDegrees = "X" increse den Wert von X und progressbar drehen schnell. Verringern und es slow.Customize nach Ihren Bedürfnissen drehen.
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="4000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadius="20dp"
android:shape="ring"
android:thickness="4dp"
android:useLevel="false" >
<size
android:height="48dp"
android:width="48dp" />
<gradient
android:centerColor="#80ec7e2a"
android:centerY="0.5"
android:endColor="#ffec7e2a"
android:startColor="#00ec7e2a"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
Hit das gleiche Problem, während auf Arbeits das Aussehen / Gefühl des Standardfortschrittsbalkens zu ändern. Hier sind einige weitere Informationen, die hoffentlich Menschen helfen:)
- Der Name der XML-Datei darf nur Zeichen enthalten:
a-z0-9_.
(dh keine Kapitelle.!)
- Um Ihre "ziehbar" es ist
R.drawable.filename
Referenz
- Standarddarstellung außer Kraft zu setzen, verwenden Sie
myProgressBar.setProgressDrawable(...)
, aber müssen Sie nicht nur Ihrem benutzerdefinierten Layout alsR.drawable.filename
beziehen, müssen Sie es alsDrawable
abzurufen:Resources res = getResources(); myProgressBar.setProgressDrawable(res.getDrawable(R.drawable.filename);
- Sie müssen Stil festlegen, bevor Fortschritt / Sekundär Fortschritt Einstellung / max (Einstellung es danach für mich in einem ‚leeren‘ Fortschrittsbalken geführt)
Es ist wohl eine Sache, die nicht in dieser Antwort vorgelegt:
Wenn Ihr Thema aus Theme.AppCompat
erbt, ProgressBar
wird übernimmt die Farbe, die Sie als "colorAccent"
in Ihrem Thema definieren.
Also, mit ..
<item name="colorAccent">@color/custom_color</item>
.. wird die Farbe des ProgressBar automagically zum @color/custom_color
tönen.
Wie ich tue es in horizontaler ProgressBar:
LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress);
progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
Sie können versuchen, Ihre Stile, Themen zu ändern, oder die Verwendung von Android: indeterminateTint = „@ color / yourColor“ wo immer Sie wollen, aber es gibt nur eine Möglichkeit, dass o tun auf jedem Android SKD Version funktioniert:
Wenn Sie bar Fortschritt ist nicht unbestimmt, bitte:
progressBar.getProgressDrawable().setColorFilter(ContextCompat.getColor(context, R.color.yourColor), PorterDuff.Mode.SRC_IN );
Wenn Sie Fortschrittsbalken unbestimmt ist, bitte:
progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.yourColor), PorterDuff.Mode.SRC_IN );
Es ist traurig, dass Android ist so ein Durcheinander!
android:progressTint="#ffffff"
einfachste Lösung, wenn Sie die Farbe in der Layout-XML-Datei ändern möchten, verwenden Sie den folgenden Code verwenden, indeterminateTint Eigenschaft für die gewünschte Farbe.
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:indeterminate="true"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="#ddbd4e"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
Diese Lösung funktioniert für mich:
<style name="Progressbar.White" parent="AppTheme">
<item name="colorControlActivated">@color/white</item>
</style>
<ProgressBar
android:layout_width="@dimen/d_40"
android:layout_height="@dimen/d_40"
android:indeterminate="true"
android:theme="@style/Progressbar.White"/>
Eine weitere kleine Sache, die das Thema Lösung funktioniert, wenn Sie Erben ein Basis-theme, also für die app-kompakt-Ihr Thema sollte sein:
<style name="AppTheme.Custom" parent="@style/Theme.AppCompat">
<item name="colorAccent">@color/custom</item>
</style>
Und dann setzen Sie diese in der Fortschrittsleiste Thema
<ProgressBar
android:id="@+id/progressCircle_progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:theme="@style/AppTheme.Custom"
android:indeterminate="true"/>
Veröffentlicht Informationen über PaulieG Antwort hinzuzufügen, da ateiob mich gebeten, etwas zu erklären, ...
kann ich sagen, dass es (oder zumindest war zum Zeitpunkt des Schreibens, wenn ich in dieser aktuellen Version von Android-Quellcode sah) einen Bug / Problem / Optimierung im ProgressBar
-Code, der einen Versuch ignoriert den Fortschritt zu setzen auf einen Wert ist es bereits an.
- d. wenn der Fortschritt = 45, und Sie versuchen, es auf 45, wird der Code nichts tun, und wird die Fortschritte nicht neu zeichnen .
Nach dem Aufruf von ProgressBar.setProgressDrawable()
, Ihre Fortschrittsbalken leer sein (weil Sie den ziehbar Teil geändert).
Dies bedeutet, dass Sie den Fortschritt einstellen müssen, und neu zu zeichnen es. Aber wenn Sie nur den Fortschritt auf einen erhaltenen Wert gesetzt, es wird nichts tun.
Sie müssen es auf 0 gesetzt zuerst, dann auf den „alten“ Wert wieder, und die Bar wird neu gezeichnet werden.
Um es zusammenzufassen:
- erhält den "alten" Fortschrittswert
- Aktualisieren der ziehbar / Farbe (macht bar leer)
- setzen Sie den Fortschritt auf 0 (sonst nächste Zeile tut nichts)
- setzen Sie den Fortschritt auf die "alten" Wert (fixe bar)
- Invalidier
Im Folgenden wird ein Verfahren Ich habe das tut dies:
protected void onResume()
{
super.onResume();
progBar = (ProgressBar) findViewById(R.id.progress_base);
int oldProgress = progBar.getProgress();
// define new drawable/colour
final float[] roundedCorners = new float[]
{ 5, 5, 5, 5, 5, 5, 5, 5 };
ShapeDrawable shape = new ShapeDrawable(new RoundRectShape(
roundedCorners, null, null));
String MyColor = "#FF00FF";
shape.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable clip = new ClipDrawable(shape, Gravity.LEFT,
ClipDrawable.HORIZONTAL);
progBar.setProgressDrawable(clip);
progBar.setBackgroundDrawable(getResources().getDrawable(
android.R.drawable.progress_horizontal));
// work around: setProgress() ignores a change to the same value
progBar.setProgress(0);
progBar.setProgress(oldProgress);
progBar.invalidate();
}
Was HappyEngineer-Lösung, ich denke, es eine ähnliche Abhilfe ist, um den „Fortschritt“ Offset manuell einstellen. In jedem Fall sollte der obige Code für Sie arbeiten.
Mit der android.support.v4.graphics. drawable.DrawableCompat :
Drawable progressDrawable = progressBar.getIndeterminateDrawable();
if (progressDrawable != null) {
Drawable mutateDrawable = progressDrawable.mutate();
DrawableCompat.setTint(mutateDrawable, primaryColor);
progressBar.setProgressDrawable(mutateDrawable);
}
Für einen horizontalen Stil ProgressBar ich benutze:
import android.widget.ProgressBar;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.ClipDrawable;
import android.view.Gravity;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
public void setColours(ProgressBar progressBar,
int bgCol1, int bgCol2,
int fg1Col1, int fg1Col2, int value1,
int fg2Col1, int fg2Col2, int value2)
{
//If solid colours are required for an element, then set
//that elements Col1 param s the same as its Col2 param
//(eg fg1Col1 == fg1Col2).
//fgGradDirection and/or bgGradDirection could be parameters
//if you require other gradient directions eg LEFT_RIGHT.
GradientDrawable.Orientation fgGradDirection
= GradientDrawable.Orientation.TOP_BOTTOM;
GradientDrawable.Orientation bgGradDirection
= GradientDrawable.Orientation.TOP_BOTTOM;
//Background
GradientDrawable bgGradDrawable = new GradientDrawable(
bgGradDirection, new int[]{bgCol1, bgCol2});
bgGradDrawable.setShape(GradientDrawable.RECTANGLE);
bgGradDrawable.setCornerRadius(5);
ClipDrawable bgclip = new ClipDrawable(
bgGradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
bgclip.setLevel(10000);
//SecondaryProgress
GradientDrawable fg2GradDrawable = new GradientDrawable(
fgGradDirection, new int[]{fg2Col1, fg2Col2});
fg2GradDrawable.setShape(GradientDrawable.RECTANGLE);
fg2GradDrawable.setCornerRadius(5);
ClipDrawable fg2clip = new ClipDrawable(
fg2GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
//Progress
GradientDrawable fg1GradDrawable = new GradientDrawable(
fgGradDirection, new int[]{fg1Col1, fg1Col2});
fg1GradDrawable.setShape(GradientDrawable.RECTANGLE);
fg1GradDrawable.setCornerRadius(5);
ClipDrawable fg1clip = new ClipDrawable(
fg1GradDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
//Setup LayerDrawable and assign to progressBar
Drawable[] progressDrawables = {bgclip, fg2clip, fg1clip};
LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);
progressLayerDrawable.setId(0, android.R.id.background);
progressLayerDrawable.setId(1, android.R.id.secondaryProgress);
progressLayerDrawable.setId(2, android.R.id.progress);
//Copy the existing ProgressDrawable bounds to the new one.
Rect bounds = progressBar.getProgressDrawable().getBounds();
progressBar.setProgressDrawable(progressLayerDrawable);
progressBar.getProgressDrawable().setBounds(bounds);
// setProgress() ignores a change to the same value, so:
if (value1 == 0)
progressBar.setProgress(1);
else
progressBar.setProgress(0);
progressBar.setProgress(value1);
// setSecondaryProgress() ignores a change to the same value, so:
if (value2 == 0)
progressBar.setSecondaryProgress(1);
else
progressBar.setSecondaryProgress(0);
progressBar.setSecondaryProgress(value2);
//now force a redraw
progressBar.invalidate();
}
Ein Beispiel Aufruf wäre:
setColours(myProgressBar,
0xff303030, //bgCol1 grey
0xff909090, //bgCol2 lighter grey
0xff0000FF, //fg1Col1 blue
0xffFFFFFF, //fg1Col2 white
50, //value1
0xffFF0000, //fg2Col1 red
0xffFFFFFF, //fg2Col2 white
75); //value2
Wenn Sie brauchen nicht den ‚sekundären Fortschritt‘ einfach eingestellt Wert2 zu value1.
Wenden Sie diese kundenspezifische Art der Fortschrittsbalken.
<style name="customProgress" parent="@android:style/Widget.ProgressBar.Small">
<item name="android:indeterminateDrawable">@drawable/progress</item>
<item name="android:duration">40</item>
<item name="android:animationCache">true</item>
<item name="android:drawingCacheQuality">low</item>
<item name="android:persistentDrawingCache">animation</item>
</style>
@ ziehbar / progress.xml -
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white"
android:pivotX="50%"
android:pivotY="50%" />
Verwenden Sie diese Art von Bild für Fortschrittsbalken.
Für besseres Ergebnis können Sie mehr Fortschritt Bilder verwenden. Und zögern Sie bitte nicht Bilder verwenden, weil Android-Plattform selbst Bilder verwenden für progressbar. Der Code wird von sdk extrahiert:)
Hier ist der Code für die Farbe der ProgressBar Wechsel von programmatisch.
ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb_listProgressBar);
int colorCodeDark = Color.parseColor("#F44336");
progressBar.setIndeterminateTintList(ColorStateList.valueOf(colorCodeDark));
ProgressBar freeRamPb = findViewById(R.id.free_ram_progress_bar);
freeRamPb.getProgressDrawable().setColorFilter(
Color.BLUE, android.graphics.PorterDuff.Mode.SRC_IN);
ProgressBar bar;
private Handler progressBarHandler = new Handler();
GradientDrawable progressGradientDrawable = new GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT, new int[]{
0xff1e90ff,0xff006ab6,0xff367ba8});
ClipDrawable progressClipDrawable = new ClipDrawable(
progressGradientDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
Drawable[] progressDrawables = {
new ColorDrawable(0xffffffff),
progressClipDrawable, progressClipDrawable};
LayerDrawable progressLayerDrawable = new LayerDrawable(progressDrawables);
int status = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub
setContentView(R.layout.startup);
bar = (ProgressBar) findViewById(R.id.start_page_progressBar);
bar.setProgress(0);
bar.setMax(100);
progressLayerDrawable.setId(0, android.R.id.background);
progressLayerDrawable.setId(1, android.R.id.secondaryProgress);
progressLayerDrawable.setId(2, android.R.id.progress);
bar.setProgressDrawable(progressLayerDrawable);
}
Das half mir eine eigene Farbe zu setzen durch den Code progressbar. Hoffe, es hilft
Wie pro muhammad-adil vorgeschlagen für SDK Version 21 und höher
android:indeterminateTint="@color/orange"
in XML Works für mich ist einfach genug.
Es ist so einfach, mit attr, wenn Sie mit Multistyle-Anwendungen handeln:
versuchen, auf diese Weise:
Deklarieren Sie unter Attribut attrs.xml
<attr name="circularProgressTheme" format="reference"></attr>
Fügen Sie unter Code in styles.xml
<style name="ProgressThemeWhite" parent="ThemeOverlay.AppCompat.Light">
<item name="colorAccent">#FF0000</item>
</style>
<style name="circularProgressThemeWhite">
<item name="android:theme">@style/ProgressThemeWhite</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="circularProgressTheme">@style/circularProgressThemeWhite</item>
</style>
verwenden Fortschrittsbalken wie unter
<ProgressBar
style="?attr/circularProgressTheme"
android:id="@+id/commonProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="visible"/>
Horizontale Fortschrittsbalken benutzerdefiniertes Material Stil:
Zur Farbe des Hintergrundes und den Fortschritt der horizontalen Fortschrittsbalken ändern.
<style name="MyProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
<item name="android:progressBackgroundTint">#69f0ae</item>
<item name="android:progressTint">#b71c1c</item>
<item name="android:minWidth">200dp</item>
</style>
es Anwenden Bar, um die Fortschritte durch style-Attribut Einstellung für individuelle Material Design und individuelle Fortschrittsprüfung http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples
Zum horizontalen ProgressBar Farbe (in Kotlin) ändern:
fun tintHorizontalProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
progress.progressTintList = ColorStateList.valueOf(color)
} else{
val layerDrawable = progress.progressDrawable as? LayerDrawable
val progressDrawable = layerDrawable?.findDrawableByLayerId(android.R.id.progress)
progressDrawable?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
}
}
Um unbestimmte ProgressBar Farbe zu ändern:
fun tintIndeterminateProgress(progress: ProgressBar, @ColorInt color: Int = ContextCompat.getColor(progress.context, R.color.colorPrimary)){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
progress.indeterminateTintList = ColorStateList.valueOf(color)
} else {
(progress.indeterminateDrawable as? LayerDrawable)?.apply {
if (numberOfLayers >= 2) {
setId(0, android.R.id.progress)
setId(1, android.R.id.secondaryProgress)
val progressDrawable = findDrawableByLayerId(android.R.id.progress).mutate()
progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
}
}
}
}
Und es tönt schließlich normalerweise Pre-Lutscher Progress