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?

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

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

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

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

        }
    });

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

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"


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


15
android:indeterminateTint="@color/yellow"

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


12

Itu bekerja untuk saya.

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

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

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

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"

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


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

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

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

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.


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>


0

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


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>

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

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

Jika saya memiliki array warna?
Pangeran
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.