Bagaimana cara mengubah warna pada progress bar?

147

Saya menggunakan progress bar melingkar di Android. Saya ingin mengubah warna ini. saya menggunakan

"?android:attr/progressBarStyleLargeInverse" 

gaya. Jadi bagaimana cara mengubah warna progress bar.

Bagaimana cara menyesuaikan gaya? Selanjutnya, apa definisi gaya?

mooongcle
sumber

Jawaban:

163

Dalam folder res / drawable, taruh ini:

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> 

Tetapkan startColordan endColorsesuai pilihan Anda.

Sekarang mengatur bahwa progress.xmldi ProgressBar's backgound.

Seperti ini

<ProgressBar
  android:id="@+id/ProgressBar01" 
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:indeterminateDrawable="@drawable/progress"
 />
Chirag
sumber
1
itu tidak berfungsi ketika saya menggunakan dialog khusus sebagai header tampilan daftar. Apakah perlu pendekatan lain?
Pankaj Kumar
22
Ini menciptakan bentuk cincin hijau, tetapi spinner ProgressBar yang sebenarnya masih terlihat.
mdupls
apakah ada cara untuk membuat warna pemintalan bergerak hanya dalam satu arah?
terima kasih,
48
Alih-alih mengatur latar belakang dengan "android: background", gunakan "android: indeterminateDrawable =" @ drawable / progress "sebagai gantinya, seperti yang disorot oleh jawaban lain
baekacaek
1
Gunakan android: startColor = "# 447a29" android: endColor = "# 227a29" nilainya berbeda sehingga tidak membentuk lingkaran statis.
Abhishek Sengupta
137

Untuk API 21 dan Lebih Tinggi. Cukup atur properti indeterminateTint. Suka:

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

Untuk mendukung perangkat pra-API 21:

mProgressSpin.getIndeterminateDrawable()
                .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN );
Pelajar222
sumber
2
dengan style="?android:attr/progressBarStyle"tidak berfungsi
user25
Jika saya memiliki array warna dan saya ingin mengatur warna ke array warna pada setiap progress bar
Prince
Ini bekerja dengan baik untuk saya, hanya untuk mengubah warna cincin progressBar :)
Gastón Saillén
Terima kasih telah menekankan aspek API
JamisonMan111
Jika saya menempatkan warna ini, warna cincin yang dipotong berputar tetapi semua itu, sehingga berubah menjadi cincin penuh sehingga Anda tidak melihatnya bergerak
Lucas Zanella
135

1.First Buat file xml di folder yang dapat digambar di bawah sumber daya

bernama "progress.xml"

<?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. lalu buat bilah progres menggunakan cuplikan folloing

<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" />
Muhamed Riyas M
sumber
Halo Muhamed, saya menggunakan roda progres khusus, saya mencoba mengubah warna pada roda progres saat runtime. Saya dicoba untuk, Setelah saya mengklik tombol, kemajuan dimulai. Saya telah mengatur warna sebagai hijau. Setelah kemajuan mencapai 100%, saya ingin memulai lagi, hanya saja kali ini warnanya harus merah. Tapi, saya tidak bisa melakukan itu .. jika memungkinkan tolong bantu saya
harikrishnan
1
Terima kasih. Ini bekerja 100%. atur progress.xml ke android: indeterminateDrawable
Leo Nguyen
Ketika saya mencoba ini, itu menciptakan perbatasan lingkaran tebal. Ada ide bagaimana mengurangi perbatasan?
Tejas
Halo Tejas, Coba ubah baris ini android: thicknessRatio = "8" di dalam progress.xml. Anda dapat mencoba nilai yang berbeda. Semoga ini berhasil.
Muhamed Riyas M
Ini berfungsi tetapi alih-alih dua cincin berputar satu sama lain, saya hanya mendapatkan satu cincin. Adakah perbaikan untuk ini?
AXE
66

Anda dapat mengubah warna secara terprogram dengan menggunakan kode ini:

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

Jika Anda ingin mengubah warna progressbar ProgressDialog, Anda dapat menggunakan ini:

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

        }
    });
Dadroid
sumber
Hai, bagaimana saya menghubungkan ProgressDialog's Progress Bar Dengan Progress.xml ??
Meghal Agrawal
Jika saya memiliki array warna dan saya ingin mengatur warna ke array warna pada setiap progress bar
Prince
36

Untuk menambah jawaban Dato, saya menemukan SRC_ATOP sebagai filter yang disukai untuk berkembang biak karena lebih baik mendukung saluran alpha.

ProgressBar v = (ProgressBar) findViewById(R.id.progress);
v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.SRC_ATOP);
aikmanr
sumber
1
Pada 2.3.x ini memberi Anda lingkaran penuh yang padat di mana MULTIPLY menjaga transparansi.
azdev
Jika saya memiliki array warna dan saya ingin mengatur warna ke array warna pada setiap progress bar
Prince
28

android: indeterminateTint = "@ color / progressbar"

Bhupinder Singh
sumber
cukup gunakan atribut di atas pada progress bar: indeterminateTint = warna Anda
Bhupinder Singh
Jawaban terbaik dan itu akan mendukung semua versi juga
Pankaj Kumar
Ini semua yang Anda butuhkan, bukan jawaban gila ini. Meskipun yang lain akan mendapat manfaat dari blok kode lengkap.
StarWind0
7
indeterminateTint tersedia untuk API 21 atau lebih tinggi. Jika itu berhasil untuk Anda, hebat!
Andy Weinstein
15

styles.xml

<style name="CircularProgress" parent="Theme.AppCompat.Light">
    <item name="colorAccent">@color/yellow</item>
</style>

  <ProgressBar
        android:layout_width="@dimen/d_40"
        android:layout_height="@dimen/d_40"
        android:indeterminate="true"
        style="@style/Widget.AppCompat.ProgressBar"
        android:theme="@style/CircularProgress"/>
Hardik Vasani
sumber
15
android:indeterminateTint="@color/yellow"

Ini berfungsi untuk saya, cukup tambahkan baris ini ke kode xml progressBar Anda

Yıldırım
sumber
12

Itu bekerja untuk saya.

<ProgressBar
android:id="@+id/ProgressBar01" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTint="@color/black"/>
Kaloglu
sumber
4
Tersedia dari API level 21
viplezer
11

Untuk mengkustomisasi ProgressBar bundar, kita perlu membuat Undrawable tak tentu untuk menampilkan custom progress bar

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

Kita perlu memasukkan drawable di progressbar seperti di bawah ini:

<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" />
Akshay Mukadam
sumber
rotatetag tidak ada sebelumnya shape. Tanpa itu, progressbar akan statis
Renan Bandeira
@RenanBandeira Anda dapat meningkatkan jawabannya jika itu benar
Akshay Mukadam
9

bagiku tema tidak bekerja dengan accentColor. Tapi itu berhasil dengan colorControlActivated

    <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"/>
S.Javed
sumber
4

Untuk melengkapi jawaban terpilih utama Muhamed Riyas M :

Rotasi lebih cepat

android:toDegrees="1080"

Cincin lebih tipis

android:thicknessRatio="16"

Putih terang

android:endColor="#80ffffff"
Suragch
sumber
4

lihat jawaban ini :

bagi saya, dua baris ini harus ada di sana agar dapat bekerja dan mengubah warna:

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

PS: tetapi ini hanya tersedia dari android 21

Amin Keshavarzian
sumber
4

Coba gunakan gaya dan atur colorControlActivated warna ProgressBar yang terlalu diinginkan.

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

Kemudian atur tema ProgressBar ke gaya baru.

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

Tambahkan ke tema aktivitas Anda, item colorControlActivated , misalnya:

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

Terapkan gaya ini ke Aktivitas Anda di manifes:

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

Anda dapat melakukan ini dengan dialog khusus dengan cukup mudah, menggunakan kembali xml dari jawaban lain:

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

Lakukan saja ini:

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));
    }
}
Nathaniel D. Wagoner
sumber
2

Anda dapat menggunakan gaya untuk mengubah warna kemajuan seperti di bawah ini

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

dan gunakan di ProgressBar seperti di bawah ini

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

Semoga ini bisa membantu.

Rahul
sumber
1

Untuk semua yang bertanya-tanya bagaimana cara meningkatkan kecepatan kemajuan kustom

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

Behl
sumber
0

Dibutuhkan nilai warna dari Res / Values ​​/ Colors.xml -> colorAccent Anda jika Anda mengubahnya, progress Anda juga akan berubah warna.

Nocturnale
sumber
0

Set android:indeterminateDrawable="@drawable/progress_custom_rotate"

Gunakan Kode Di Bawah Ini untuk Bilah Kemajuan Cincin Edaran Kustom

Salin kode di bawah ini dan buat "progress_custom_rotate.xml" di folder Drawable

<?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>
Bhavesh Moradiya
sumber
0
<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" />
Pengecualian Null Pointer
sumber
-1

Anda dapat mengubah warna progressbar Anda menggunakan kode di bawah ini:

progressBar.getProgressDrawable().setColorFilter(
    getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_IN);
pengguna3273957
sumber
Jika saya memiliki array warna?
Pangeran