Dairesel ilerleme çubuğunda renk nasıl değiştirilir?


154

Android'de dairesel ilerleme çubuğu kullanıyorum. Bunun rengini değiştirmek istiyorum. Ben kullanıyorum

"?android:attr/progressBarStyleLargeInverse" 

tarzı. Peki ilerleme çubuğunun rengi nasıl değiştirilir.

Stil nasıl özelleştirilir? Dahası, stilin tanımı nedir?

Yanıtlar:


166

Res / drawable klasörüne şunu koyun:

progress.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:fromDegrees="0"
      android:toDegrees="360">

    <shape 
        android:shape="ring" 
        android:innerRadiusRatio="3"
        android:thicknessRatio="8" 
        android:useLevel="false">

    <size 
        android:width="76dip" 
        android:height="76dip" />

    <gradient 
        android:type="sweep" 
        android:useLevel="false"
        android:startColor="#447a29" 
        android:endColor="#00ffffff"
        android:angle="0"/>

    </shape>

</rotate> 

Set startColorve endColorseçiminize göre.

Şimdi ayarlamanız progress.xmliçinde ProgressBarbireyin backgound.

Bunun gibi

<ProgressBar
  android:id="@+id/ProgressBar01" 
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:indeterminateDrawable="@drawable/progress"
 />

1
Liste görünümü başlığı olarak özel iletişim kutusu kullandığımda çalışmıyor. Başka bir yaklaşıma ihtiyaç var mı?
— Pankaj Kumar

22
Bu, yeşil bir halka şekli oluşturur, ancak gerçek ProgressBar'ın döndürücüsü hala görünür durumdadır.
— mdupls

Dönen renkleri tek bir yönde hareket ettirmenin bir yolu var mı?
— thepoosh

48
Arka planı "android: background" ile ayarlamak yerine, bunun yerine "android: indeterminateDrawable =" @ drawable / progress "
— ifadesini

1
Statik bir daire oluşturmaması için android: startColor = "# 447a29" android: endColor = "# 227a29" değerlerini farklı kullanın.
— Abhishek Sengupta

150

API 21 ve Üzeri için. Basitçe indeterminateTint özelliğini ayarlayın. Sevmek:

android:indeterminateTint="@android:color/holo_orange_dark"

API 21 öncesi cihazları desteklemek için:

mProgressSpin.getIndeterminateDrawable()
                .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN );

2
ile style="?android:attr/progressBarStyle"çalışmıyor
— kullanıcı25

Bir dizi renge
— sahipsem

Benim için bu işlenmiş ince, sadece progressBar halka rengini :) değiştirmek için
— Gastón Saillén

API'lerin yönünü vurguladığınız için teşekkür ederiz
— JamisonMan111

Bu rengi koyarsam, eğrilen kesilmiş halkayı renklendirir ama hepsini renklendirir, böylece tam bir halkaya dönüşür, böylece hareket ettiğini görmezsiniz
— Lucas Zanella

136

1. İlk olarak kaynak altındaki çekilebilir klasörde bir xml dosyası oluşturun

"progress.xml" adlı

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" >

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false" >

    <size
        android:height="76dip"
        android:width="76dip" />

    <gradient
        android:angle="0"
        android:endColor="color/pink"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

    </shape>

</rotate>

2. ardından aşağıdaki parçacığı kullanarak bir ilerleme çubuğu oluşturun

<ProgressBar
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/relativeLayout1"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="20dp"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/progress" />

Merhaba Muhamed, özel ilerleme tekerleği kullanıyorum, çalışma zamanında ilerleme tekerleğini değiştirmeye çalıştım. Denedim, Bir düğmeye tıkladığımda ilerleme başlıyor. Rengi yeşil olarak ayarladım. İlerleme% 100'e ulaştıktan sonra tekrar başlamasını istiyorum, sadece bu sefer rengi kırmızı olmalı. Ama bunu yapamadım .. Mümkünse lütfen yardım et
— harikrishnan

1
Teşekkürler. % 100 çalışır. progress.xml'yi android olarak ayarlayın: indeterminateDrawable
— Leo Nguyen

Bunu denediğimde, kalın bir daire sınırı oluşturdu. Sınırın nasıl azaltılacağına dair bir fikriniz var mı?
— Tejas

Merhaba Tejas, progress.xml içinde bu satırı android: thickRatio = "8" değiştirmeye çalışın. Farklı değerler deneyebilirsiniz. Umarım işe yarar.
— Muhamed Riyas M

Çalışıyor ama birbirine karşı dönen iki halka yerine sadece tek bir halka alıyorum. Bunun için herhangi bir düzeltme var mı?
— AX

66

Bu kodu kullanarak programlı olarak rengi değiştirebilirsiniz:

ProgressBar v = (ProgressBar) findViewById(R.id.progress);
v.getIndeterminateDrawable().setColorFilter(0xFFcc0000,
                        android.graphics.PorterDuff.Mode.MULTIPLY);

ProgressDialog'un ilerleme çubuğu rengini değiştirmek istiyorsanız, bunu kullanabilirsiniz:

mDilog.setOnShowListener(new OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            ProgressBar v = (ProgressBar)mDilog.findViewById(android.R.id.progress);
            v.getIndeterminateDrawable().setColorFilter(0xFFcc0000,
                    android.graphics.PorterDuff.Mode.MULTIPLY);

        }
    });

Hey, ProgressDialog'un İlerleme Çubuğunu Progress.xml ile nasıl bağlayacağım?
— Meghal Agrawal

Bir dizi renge
— sahipsem

37

Dato'nun cevabına eklemek için SRC_ATOP'u alfa kanalını daha iyi desteklediği için çarpmak için tercih edilen bir filtre olarak görüyorum.

ProgressBar v = (ProgressBar) findViewById(R.id.progress);
v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.SRC_ATOP);

1
2.3.x'te bu size ÇOKLU şeffaflığı koruduğu içi dolu dolu bir daire verir.
— azdev

Bir dizi renge
— sahipsem

Uyumlu sürümü kullanın:progressBar.indeterminateDrawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(0xffffff, BlendModeCompat.SRC_ATOP)
— Guy Veya

31

android: indeterminateTint = "@ renk / ilerleme çubuğu"


sadece ilerleme çubuğundaki yukarıdaki özniteliği kullanın: indeterminateTint = renginiz
— Bhupinder Singh

En iyi yanıt ve tüm sürümleri de destekleyecektir
— Pankaj Kumar

Tek ihtiyacınız olan bu, bu çılgın cevaplar değil. Diğerleri tam kod bloğundan faydalanacak olsa da.
— StarWind0

7
indeterminateTint, API 21 veya üstü için mevcuttur. Bu senin için işe yararsa, harika!
— Andy Weinstein

18
android:indeterminateTint="@color/yellow"

Bu benim için çalışıyor, sadece bu satırı progressBar xml kodunuza ekleyin



12

Bu benim için iş.

<ProgressBar
android:id="@+id/ProgressBar01" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTint="@color/black"/>

4
API seviyesi 21
— viplezer

11

Dairesel ProgressBar'ı özelleştirmek için, özel ilerleme çubuğunu göstermek için bir indeterminateDrawable oluşturmamız gerekir.

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1">

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false">

        <size
            android:height="48dip"
            android:width="48dip" />

        <gradient
            android:centerColor="#f96047"
            android:centerY="0.50"
            android:endColor="#fb9c8d"
            android:startColor="#f72d0c"
            android:type="sweep"
            android:useLevel="false" />

    </shape>

</rotate>

Drawable'ı aşağıdaki gibi progressbar'a eklememiz gerekiyor:

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_centerInParent="true"
    style="?android:attr/progressBarStyleLarge"
    android:visibility="visible"
    android:progressDrawable="@drawable/widget_progressbar"
    android:indeterminateDrawable="@drawable/widget_progressbar"
    android:layout_height="wrap_content" />

rotateetiketi daha önce eksik shape. Onsuz ilerleme
— çubuğu

@RenanBandeira doğruysa cevabı iyileştirebilirsiniz
— Akshay Mukadam

9

benim için tema accentColor ile çalışmıyordu. Ancak colorControlActivated ile çalıştı

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

7

bu yanıtı kontrol et :

benim için bu iki çizginin çalışması ve rengini değiştirmesi için orada olması gerekiyordu:

android:indeterminateTint="@color/yourColor"
android:indeterminateTintMode="src_in"

Not: ancak yalnızca android 21'de mevcut


4

Muhamed Riyas M'nin en çok oylanan cevabını tamamlamak için :

Daha hızlı dönüş

android:toDegrees="1080"

İnceltici halka

android:thicknessRatio="16"

Açık beyaz

android:endColor="#80ffffff"

4

Bir stil kullanmayı deneyin ve colorControlActivated'ı çok istenen ProgressBar rengini ayarlayın.

<style name="progressColor" parent="Widget.AppCompat.ProgressBar">
    <item name="colorControlActivated">@color/COLOR</item>
</style>

Ardından ProgressBar'ın temasını yeni stile ayarlayın.

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/progressColor"
 />

4
<style name="progressColor" parent="Widget.AppCompat.ProgressBar">
    <item name="colorControlActivated">@color/colorPrimary</item>
</style>


<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="250dp"
    android:theme="@style/progressColor"
    android:layout_height="250dp"
    android:layout_centerInParent="true" />

3

Etkinlik temanıza colorControlActivated öğesini ekleyin , örneğin:

    <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            ...
            <item name="colorControlActivated">@color/rocket_black</item>
            ...
    </style>

Bu stili manifest'teki Aktivitenize uygulayın:

<activity
    android:name=".packege.YourActivity"
    android:theme="@style/AppTheme.NoActionBar"/>

2

Bunu, xml'yi diğer yanıtlardan yeniden kullanarak oldukça kolay bir şekilde özel bir iletişim kutusuyla yapabilirsiniz:

<?xml version="1.0" encoding="utf-8"?>

<shape
    android:innerRadiusRatio="3"
    android:shape="ring"
    android:thicknessRatio="8"
    android:useLevel="false" >

    <size
        android:height="76dip"
        android:width="76dip" />

    <gradient
        android:angle="0"
        android:endColor="@color/oceanBlue"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

</shape>

Sadece şunu yap:

public static class ModifiedProgressDialog extends ProgressDialog {
    public ModifiedProgressDialog(Context context) {
        super(context);
    }

    @Override
    public void show() {
        super.show();
        setIndeterminateDrawable(getContext().getResources().getDrawable(R.drawable.blue_progress));
    }
}

2

Aşağıdaki gibi ilerlemenin rengini değiştirmek için bir stil kullanabilirsiniz

 <style name="AppTheme.anyName">
        <item name="colorAccent">YOUR_COLOR</item>
    </style>

ve aşağıdaki gibi ProgressBar'da kullanın

<ProgressBar
            style="?android:attr/progressBarStyle"
            android:theme="@style/AppTheme.WhiteAccent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="@dimen/dimen_30"
        />

Umarım yardımcı olur.


1

Özel ilerleme hızının nasıl artırılacağını merak edenler için

  <?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
android:toDegrees="1080"><!--HERE YOU COULD INCREASE SPEED BY SETTING TODEGRESS(1080 is 3 loops instead of 1 in same amt of time)-->
<shape android:shape="ring" android:innerRadiusRatio="3"
    android:thicknessRatio="8" android:useLevel="false">
    <size android:width="76dip" android:height="76dip" />
    <gradient android:type="sweep" android:useLevel="false"
        android:startColor="#447a29" 
        android:endColor="#447a29"
        android:angle="0"
         />
</shape>


0

Res / Values ​​/ Colors.xml -> colorAccent öğenizden renk değerini alır değiştirirseniz, progressBar renginiz de değişir.


0

Ayarlamak android:indeterminateDrawable="@drawable/progress_custom_rotate"

Özel Dairesel Halka İlerleme Çubuğu için Aşağıdaki Kodu Kullanın

Aşağıdaki kodu kopyalayın ve Drawable klasöründe "progress_custom_rotate.xml" oluşturun

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
    android:toDegrees="1080">

    <shape android:shape="ring" android:innerRadiusRatio="3"
        android:thicknessRatio="8" android:useLevel="false">

        <size android:width="48dip" android:height="48dip" />

        <gradient android:type="sweep" android:useLevel="false"
            android:startColor="#4c737373" android:centerColor="#4c737373"
            android:centerY="0.50" android:endColor="#ffffd300" />

    </shape>

</rotate>

-1

Aşağıdaki kodu kullanarak ilerleme çubuğu renginizi değiştirebilirsiniz:

progressBar.getProgressDrawable().setColorFilter(
    getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_IN);

Bir renk dizim varsa o zaman?
— Prince Dholakiya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.