Pergunta

Eu estou usando uma barra de progresso horizontal no meu aplicativo Android, e eu quero mudar a sua cor progresso (que é amarelo por padrão). Como posso fazê-lo usando code (não XML)?

Foi útil?

Solução

Lamento que não é a resposta, mas o que está conduzindo a defini-lo a partir do código requisito? E .setProgressDrawable deve funcionar se ele está definido corretamente

<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>

Outras dicas

Para uma ProgressBar horizontal, você pode usar um ColorFilter, também, como este:

progressBar.getProgressDrawable().setColorFilter(
    Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);

 Red ProgressBar utilizando filtro de cor

Nota: Isso modifica a aparência de todas as barras de progresso em seu aplicativo. Para modificar apenas uma barra de progresso específico, faça o seguinte:

Drawable progressDrawable = progressBar.getProgressDrawable().mutate();
progressDrawable.setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN);
progressBar.setProgressDrawable(progressDrawable);

Se progressBar é indeterminado, em seguida, usar getIndeterminateDrawable() vez de getProgressDrawable().

Desde Lollipop (API 21) você pode definir um tom de progresso:

progressBar.setProgressTintList(ColorStateList.valueOf(Color.RED));

 Red ProgressBar usando matiz progresso

Isto não é de forma programática, mas acho que poderia ajudar um monte de gente de qualquer maneira.
Eu tentei um monte e da maneira mais eficiente foi adicionar estas linhas ao meu ProgressBar no arquivo .xml:

            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:indeterminateTint="@color/secondary"

Assim, no final deste código fez isso por mim:

<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">

Esta solução funciona para API 21 +

Para o meu progressbar indeterminado (giratório) Eu só definir um filtro de cor na drawable. Funciona muito bem e apenas uma linha.

Exemplo onde configuração de cor para vermelho:

ProgressBar spinner = new android.widget.ProgressBar(
                context,
                null,
                android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);

enter descrição da imagem aqui

Esta é uma questão de idade, mas utilizando tema não é mencionado aqui. Se o seu tema padrão está usando AppCompat, cor do seu ProgressBar será colorAccent você definiu.

Alterar colorAccent também vai mudar de cor do seu ProgressBar, mas não muda também reflete em vários lugares. Então, se você quer uma cor diferente apenas por um PregressBar específico que você pode fazer isso através da aplicação de tema para que ProgressBar:

  • Estender o tema padrão e colorAccent override

    <style name="AppTheme.WhiteAccent">
        <item name="colorAccent">@color/white</item> <!-- Whatever color you want-->
    </style>
    
  • E em ProgressBar adicionar o atributo android:theme:

    android:theme="@style/AppTheme.WhiteAccent"
    

Por isso, será algo parecido com isto:

<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" />

Então, você está apenas mudando a colorAccent para o seu ProgressBar particular.

Nota : Usando style não vai funcionar. Você precisa apenas android:theme uso. Você pode encontrar mais uso do tema aqui: https://plus.google.com/u/0/ + AndroidDevelopers / posts / JXHKyhsWHAH

Todos API

Se o uso todos API apenas criar o tema em estilo

style.xml

<resources>

    //...

    <style name="progressBarBlue" parent="@style/Theme.AppCompat">
        <item name="colorAccent">@color/blue</item>
    </style>

</resources>

e uso em andamento

<ProgressBar
    ...
    android:theme="@style/progressBarBlue" />

nível API 21 e superior

se usado em nível de API 21 e superior apenas usar este código:

<ProgressBar
   //...
   android:indeterminate="true"
   android:indeterminateTintMode="src_atop"
   android:indeterminateTint="@color/secondary"/>

como por algumas das sugestões, você pode especificar uma forma e clipdrawable com uma cor, em seguida, configurá-lo. Eu tenho esse trabalho através de programação. Isto é como eu faço isso ..

Em primeiro lugar certifique-se de importar a biblioteca drawable ..

import android.graphics.drawable.*;

Em seguida, use o código semelhante ao abaixo;

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);

Isso funcionou para mim:

<ProgressBar
 android:indeterminateTint="#d60909"
 ... />

Se Indeterminate:

((ProgressBar)findViewById(R.id.progressBar))
    .getIndeterminateDrawable()
    .setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN);

Hoje em dia em 2016 eu encontrei alguns dispositivos pré-pirulito não honram a configuração colorAccent, então minha solução final para todas as APIs agora é o seguinte:

// 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);
}

Para pontos de bônus, ele não usa nenhum código obsoleto. Experimente!

Isto é o que eu fiz. Trabalhou.

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:
Aqui utilizar gradiente a cor mudança como você gosta. E android: toDegrees = "X" increse o valor de X e rotação progressbar rápido. Diminuir e girar slow.Customize acordo com suas necessidades.

<?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>

Exemplo: enter descrição da imagem aqui

Bata o mesmo problema, enquanto trabalhava em modificar o olhar / sensação da barra de progresso padrão. Aqui está mais algumas informações que venha a ajudar as pessoas:)

  • O nome do arquivo XML deve conter apenas caracteres: (.! Ou seja, sem capitais) a-z0-9_.
  • Para fazer referência a seu "drawable" é R.drawable.filename
  • Para substituir a aparência padrão, você usa myProgressBar.setProgressDrawable(...), no entanto você precisa não pode simplesmente se referir ao seu layout personalizado como R.drawable.filename, você precisa recuperá-la como um Drawable:
    Resources res = getResources();
    myProgressBar.setProgressDrawable(res.getDrawable(R.drawable.filename);
    
  • Você precisa estilo set antes de definir o progresso progresso / secundário / max (definindo-o depois para mim resultou em um 'vazio' barra de progresso)

Há provavelmente uma coisa que não tem sido referido nesta resposta:

Se o seu tema é herança de Theme.AppCompat, ProgressBar assumirá a cor que você definida como "colorAccent" em seu tema.

Assim, usando ..

<item name="colorAccent">@color/custom_color</item>

.. vai tingir a cor do ProgressBar automagicamente ao @color/custom_color.

Como eu fiz isso em ProgressBar horizontal:

    LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
    Drawable progressDrawable = layerDrawable.findDrawableByLayerId(android.R.id.progress);
    progressDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);

Você pode tentar mudar seus estilos, temas ou usando android: indeterminateTint = "@ cor / yourColor" em qualquer lugar que quiser, mas há apenas uma maneira o fazer que irá funcionar em qualquer versão SKD Android:

Se você progride bar não é indeterminado, por favor, use:

progressBar.getProgressDrawable().setColorFilter(ContextCompat.getColor(context, R.color.yourColor), PorterDuff.Mode.SRC_IN );

Se você progride bar é indeterminado, por favor, use:

progressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), R.color.yourColor), PorterDuff.Mode.SRC_IN );

É triste que o Android é uma bagunça!

android:progressTint="#ffffff" 

Simplest Solution se você quer mudar a cor no arquivo xml layout, utilizar o código abaixo e uso indeterminateTint propriedade para a cor desejada.

    <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" />

Esta solução funcionou para mim:

<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"/>

Uma coisa mais pequena, a solução tema funciona se você herdar um tema base, de modo a aplicação compactar seu tema deve ser:

<style name="AppTheme.Custom" parent="@style/Theme.AppCompat">
    <item name="colorAccent">@color/custom</item>
</style>

E, em seguida, definir isso no tema barra de progresso

<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"/>

Enviado para adicionar informações sobre de PaulieG resposta , desde ateiob me pediu para explicar alguma coisa ...


Eu posso dizer que não é (ou pelo menos era, no momento de escrever quando eu olhei para que a versão atual do código fonte do Android) um bug / issue / otimização no código ProgressBar que ignora uma tentativa de definir o progresso para um valor que já no é.

  • i. se o progresso = 45, e você tentar defini-lo para 45, o código não fará nada, e não irá redesenhar o progresso .

Depois de chamar ProgressBar.setProgressDrawable(), sua barra de progresso ficará em branco (porque você mudou a parte drawable).

Isto significa que você precisa para definir o progresso, e redesenhá-lo. Mas se você apenas definir o progresso para um valor preservado, ele não fará nada.

Você deve configurá-lo para 0 primeiro, em seguida, para o valor "velho" de novo, e o bar irá redesenhar.


Assim, para resumir:

  • preservar o valor progresso "velho"
  • atualizar o drawable / cor (faz barra em branco)
  • redefinir o progresso para 0 (caso contrário próxima linha não faz nada)
  • redefinir o progresso para o "velho" valor (correções bar)
  • invalidate

A seguir é um método que tenho que faz isso:

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();
}

No que diz respeito a solução de HappyEngineer, eu acho que foi uma solução semelhante, para definir manualmente o "progresso" offset. Em ambos os casos, o código acima deve trabalhar para você.

Use a android.support.v4.graphics. drawable.DrawableCompat :

            Drawable progressDrawable = progressBar.getIndeterminateDrawable();
            if (progressDrawable  != null) {
                Drawable mutateDrawable = progressDrawable.mutate();
                DrawableCompat.setTint(mutateDrawable, primaryColor);
                progressBar.setProgressDrawable(mutateDrawable);
            }

Para um estilo ProgressBar eu uso horizontal:

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();
  }

Um exemplo de chamada seria:

  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

Se você não precisa do 'progresso secundário' simplesmente conjunto value2 para value1.

Aplicar este estilo personalizado para a barra de progresso.

<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>

@ drawable / 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%" />

Use este tipo de imagem para barra de progresso. enter descrição da imagem aqui

Para melhor resultado você pode usar várias imagens de progresso. E por favor não hesite usando imagens, porque Plataforma Android em si usar imagens para progressbar. O código é extraído do SDK:)

Aqui está o código para alterar a cor de ProgressBar por programação.

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);
}

Isso me ajudou a definir uma cor personalizada para progressbar através de código. Espero que ajude

De acordo com Muhammad-Adil sugeriu para SDK versão 21 e acima

android:indeterminateTint="@color/orange"

em Works XML para mim, é bastante fácil.

É tão simples usando attr, se você está lidando com aplicativos multistyle:

tentar desta forma:

Declare abaixo atributo attrs.xml

 <attr name="circularProgressTheme" format="reference"></attr>

Cole o código abaixo na 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>

bar uso progressos como abaixo

  <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"/>

Horizontal barra de progresso estilo de material personalizado:

Para alterar a cor de fundo e o progresso da barra de progresso horizontal.

<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>

Aplique-a barra de progresso, definindo atributo de estilo, para estilos de materiais personalizados e verificação barra de progresso personalizada http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples

Para mudar a cor ProgressBar horizontal (em Kotlin):

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)
    }
}

Para mudar a cor ProgressBar indeterminada:

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)
            }
        }
    }
}

E, finalmente, normalmente matiz pré-pirulito ProgressBars

matizado progressos na api 19

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top