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.