J'ai un progressBar utilisant la classe ProgressBar.
Je fais juste ceci:
progressBar = new ProgressBar(this, null, Android.R.attr.progressBarStyleHorizontal);
Je dois changer la couleur de celui-ci, en utilisant la valeur d'entrée comme ceci:
int color = "red in RGB value".progressBar.setColor(color)
ou quelque chose comme ça...
Je ne peux pas utiliser un disposition XML car la barre de progression est personnalisable pour les utilisateurs.
Comme j'ai trouvé de l'aide sur un sujet ici mais que je ne me souviens pas du lien, je publie ma solution complète qui fonctionne très bien pour mes besoins:
// Draw a simple progressBar from xml
progressBar = new ProgressBar(this, null, Android.R.attr.progressBarStyleHorizontal);
// Convert the color (Decimal value) to HEX value: (e.g: #4b96a0)
String color = colorDecToHex(75, 150, 160);
// Define a shape with rounded corners
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null));
// Sets the progressBar color
pgDrawable.getPaint().setColor(Color.parseColor(color));
// Adds the drawable to your progressBar
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
progressBar.setProgressDrawable(progress);
// Sets a background to have the 3D effect
progressBar.setBackgroundDrawable(Utils.getActivity().getResources()
.getDrawable(Android.R.drawable.progress_horizontal));
// Adds your progressBar to your layout
contentLayout.addView(progressBar);
Et voici le code pour convertir les valeurs de couleur DECIMAL en HEXADECIMAL:
public static String colorDecToHex(int p_red, int p_green, int p_blue)
{
String red = Integer.toHexString(p_red);
String green = Integer.toHexString(p_green);
String blue = Integer.toHexString(p_blue);
if (red.length() == 1)
{
red = "0" + red;
}
if (green.length() == 1)
{
green = "0" + green;
}
if (blue.length() == 1)
{
blue = "0" + blue;
}
String colorHex = "#" + red + green + blue;
return colorHex;
}
Je pense que la dernière méthode n'est pas si propre mais elle fonctionne bien.
J'espère que cela vous aidera, trop de temps perdu sur cette barre de progression.
Cela aidera beaucoup pas besoin de faire autant de codage :)
ProgressBar spinner = new Android.widget.ProgressBar(
context,
null,
Android.R.attr.progressBarStyle);
spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000,Android.graphics.PorterDuff.Mode.MULTIPLY);
Dans le cas où vous devez teinter l'arrière-plan et la barre de progression de différentes couleurs.
progress_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@Android:id/background">
<shape Android:shape="rectangle" >
<solid Android:color="@color/white" />
</shape>
</item>
<item Android:id="@Android:id/progress">
<clip>
<shape>
<solid Android:color="@color/green" />
</shape>
</clip>
</item>
</layer-list>
Il est possible, par programmation, de décomposer ses éléments de liste de calques et de les colorer séparément:
LayerDrawable progressBarDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable backgroundDrawable = progressBarDrawable.getDrawable(0);
Drawable progressDrawable = progressBarDrawable.getDrawable(1);
backgroundDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.white), PorterDuff.Mode.SRC_IN);
progressDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.red), PorterDuff.Mode.SRC_IN);
Mise à jour
Dans les versions plus récentes de Android (21 œuvres), vous pouvez modifier la couleur d'une barre de progression par programme en utilisant simplement setProgressTintList
.
Pour le mettre en rouge, utilisez:
//bar is a ProgressBar
bar.setProgressTintList(ColorStateList.valueOf(Color.RED));
Il est possible de coloriser la barre de progression en définissant le filtre de couleur sur la barre de progression dessinable:
Drawable drawable = progressBar.getProgressDrawable();
drawable.setColorFilter(new LightingColorFilter(0xFF000000, customColorInt));
Cela fonctionne pour moi avec AppCompat: DrawableCompat.setTint (progressBar.getProgressDrawable (), tintColor);
si vous souhaitez modifier la couleur de la barre de progression par programme, vous copiez après ce code, cela fonctionne à 100%
mainProgressBar.getIndeterminateDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
progressbar.setIndeterminateTintList(ColorStateList.valueOf(Color.RED));
Cela ne fonctionne qu'au-dessus de l'API 21
J'ai donné couleur par défaut in xml by drawable.
Je l'ai changé par programme.
activity_splasg.xml:
<ProgressBar
Android:id="@+id/splashProgressBar"
Android:progressDrawable="@drawable/splash_progress_drawable"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:max="100"
Android:progress="50"
style="?android:attr/progressBarStyleHorizontal"
Android:layout_alignParentBottom="true" />
splash_progress_drawable.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@Android:id/background">
<shape>
<solid
Android:color="@Android:color/transparent" />
</shape>
</item>
<item
Android:id="@Android:id/progress">
<clip>
<shape>
<solid
Android:color="#e5c771" />
</shape>
</clip>
</item>
</layer-list>
Maintenant, comment changer ProgressDrawable color par programme.
ProgressBar splashProgressBar = (ProgressBar)findViewById(R.id.splashProgressBar);
Drawable bgDrawable = splashProgressBar.getProgressDrawable();
bgDrawable.setColorFilter(Color.BLUE, Android.graphics.PorterDuff.Mode.MULTIPLY);
splashProgressBar.setProgressDrawable(bgDrawable);
J'espère que ceci vous aidera.
Ce message est ce que vous recherchez: Comment changer la couleur de progression de la barre de progression dans Android
Si vous souhaitez que l'utilisateur choisisse ses propres couleurs, créez simplement des fichiers XML à dessins multiples pour chaque couleur et sélectionnez-les en fonction du choix de l'utilisateur.
Layout = activity_main.xml:
<ProgressBar
Android:id="@+id/circle_progress_bar_middle"
style="?android:attr/progressBarStyleHorizontal"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_centerInParent="true"
Android:max="100"
Android:rotation="-90"
Android:indeterminate="false"
Android:progressDrawable="@drawable/my_drawable_settings2" />
Dans Java Activité/Fragment:
ProgressBar myProgressBar = (ProgressBar) view.findViewById(R.id.circle_progress_bar_middle);
myProgressBar.setProgressDrawable(getResources().getDrawable(R.my_drawable_settings1));
Le fichier my_drawable_settings1.xml dans votre dossier drawable/mipmap:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:id="@Android:id/progress">
<shape
Android:innerRadius="55dp"
Android:shape="ring"
Android:thickness="9dp"
Android:useLevel="true">
<gradient
Android:startColor="#3594d1"
Android:endColor="@color/white"
Android:type="sweep" />
</shape>
</item>
</layer-list>
Où my_drawable_settings1 et my_drawable_settings2.xml a des couleurs différentes.