Làm thế nào để thay đổi màu sắc trong thanh tiến trình tròn?


147

Tôi đang sử dụng thanh tiến trình tròn trên Android. Tôi muốn thay đổi màu sắc của điều này. tôi đang dùng

"?android:attr/progressBarStyleLargeInverse" 

Phong cách. Vậy làm thế nào để thay đổi màu sắc của thanh tiến trình.

Làm thế nào để tùy chỉnh phong cách? Hơn nữa, định nghĩa của phong cách là gì?

Câu trả lời:


163

Trong thư mục res / drawable, đặt cái này:

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> 

Đặt startColorendColortheo sự lựa chọn của bạn.

Bây giờ đặt nó progress.xmltrong ProgressBarbackgound.

Như thế này

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

1
Nó không hoạt động khi tôi đang sử dụng hộp thoại tùy chỉnh làm tiêu đề xem danh sách. Có cần phải tiếp cận một cách khác?
Pankaj Kumar

22
Điều này tạo ra hình dạng vòng màu xanh lá cây, nhưng spinner thực tế của ProgressBar vẫn hiển thị.
mdupls

Có cách nào để làm cho màu sắc quay chỉ di chuyển theo một hướng không?
thepoosh

48
Thay vì đặt nền bằng "android: nền", hãy sử dụng "android: indeterminateDrawable =" @ drawable / tiến trình "thay vào đó, như được tô sáng bởi một câu trả lời khác
baekacaek

1
Sử dụng các giá trị android: startColor = "# 447a29" android: endColor = "# 227a29" để nó không tạo thành một vòng tròn tĩnh.
Abhishek Sengupta

137

Đối với API 21 trở lên. Đơn giản chỉ cần đặt thuộc tính không xác định. Giống:

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

Để hỗ trợ các thiết bị API 21 trước:

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

2
với style="?android:attr/progressBarStyle"không làm việc
user25

Nếu tôi có một mảng màu và tôi muốn đặt màu thành một mảng màu trên mỗi thanh tiến trình
Prince

Điều này làm việc tốt với tôi, chỉ để thay đổi màu nhẫn tiến bộ :)
Gastón Saillén

Cảm ơn bạn đã nhấn mạnh khía cạnh của API
JamisonMan111

Nếu tôi đặt màu này, nó sẽ tô màu cho chiếc nhẫn bị cắt nhưng tất cả đều có màu, vì vậy nó biến thành một chiếc nhẫn đầy đủ để bạn không thấy nó chuyển động
Lucas Zanella

135

1.First Tạo một tệp xml trong thư mục drawable dưới tài nguyên

được đặt tên là "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. sau đó thực hiện một thanh tiến trình bằng cách sử dụng đoạn trích

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

Xin chào Muhamed, tôi đang sử dụng bánh xe tiến độ tùy chỉnh, tôi đã cố gắng thay đổi màu sắc trong bánh xe tiến độ khi chạy. Tôi đã cố gắng, Khi tôi nhấp vào nút, tiến trình bắt đầu. Tôi đã đặt màu là màu xanh lá cây. Sau khi tiến độ đạt 100%, tôi muốn nó bắt đầu lại, chỉ lần này màu của nó phải là màu đỏ. Nhưng, tôi không thể làm điều đó .. nếu có thể, xin hãy giúp tôi
harikrishnan

1
Cảm ơn. Nó hoạt động 100%. đặt tiến trình thành android: không xác địnhDrawable
Leo Nguyễn

Khi tôi thử điều này, nó tạo ra một đường viền dày của vòng tròn. Bất kỳ ý tưởng làm thế nào để giảm biên giới?
Tejas

Xin chào Tejas, Hãy thử thay đổi dòng này android: thickRatio = "8" bên trong tệp process.xml. Bạn có thể thử các giá trị khác nhau. Hy vọng nó sẽ làm việc.
Muhamed Riyas M

Nó hoạt động nhưng thay vì hai vòng quay với nhau, tôi chỉ nhận được một vòng duy nhất. Bất kỳ sửa chữa cho điều này?
AX

66

Bạn có thể thay đổi màu lập trình bằng cách sử dụng mã này:

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

Nếu bạn muốn thay đổi màu thanh tiến trình của ProgressDialog, bạn có thể sử dụng màu này:

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

        }
    });

Xin chào, làm thế nào tôi sẽ kết nối Thanh tiến trình của ProgressDialog với Progress.xml ??
Meghal Agrawal

Nếu tôi có một mảng màu và tôi muốn đặt màu thành một mảng màu trên mỗi thanh tiến trình
Prince

36

Để thêm vào câu trả lời của Dato, tôi thấy SRC_ATOP là bộ lọc thích hợp hơn để nhân lên vì nó hỗ trợ tốt hơn cho kênh alpha.

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

1
Trên 2.3.x, điều này cung cấp cho bạn một vòng tròn được lấp đầy, trong đó NHIỀU bảo tồn tính minh bạch.
azdev

Nếu tôi có một mảng màu và tôi muốn đặt màu thành một mảng màu trên mỗi thanh tiến trình
Prince

28

android: indeterminateTint = "@ color / Progressbar"


chỉ sử dụng thuộc tính trên trong thanh tiến trình: indeterminateTint = màu của bạn
Bhupinder Singh

Câu trả lời hay nhất và nó cũng sẽ hỗ trợ cho tất cả các phiên bản
Pankaj Kumar

Đây là tất cả những gì bạn cần, không phải là những câu trả lời điên rồ. Mặc dù những người khác sẽ được hưởng lợi từ khối mã đầy đủ.
StarWind0

7
indeterminateTint có sẵn cho API 21 trở lên. Nếu điều đó làm việc cho bạn, tuyệt vời!
Andy Weinstein

15

kiểu tệp

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


14
android:indeterminateTint="@color/yellow"

Đây là công việc đối với tôi, chỉ cần thêm dòng này vào mã xml tiến trình của bạn


12

Đó là công việc cho tôi.

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

4
Có sẵn từ API cấp 21
viplzer

11

Để tùy chỉnh ProgressBar tròn, chúng ta cần tạo một không xác địnhDrawable để hiển thị thanh tiến trình tùy chỉnh

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

Chúng ta cần bao gồm drawable trong thanh tiến trình như bên dưới:

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

rotatethiếu thẻ trước shape. Không có nó, thanh tiến trình sẽ tĩnh
Renan Bandeira

@RenanBandeira bạn có thể cải thiện câu trả lời nếu đúng
Akshay Mukadam

9

Đối với tôi, chủ đề không hoạt động với accentColor. Nhưng nó đã làm việc với 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

Để bổ sung cho Muhamed Riyas M's câu trả lời được bình chọn hàng đầu :

Xoay nhanh hơn

android:toDegrees="1080"

Vòng mỏng hơn

android:thicknessRatio="16"

Trắng nhạt

android:endColor="#80ffffff"

4

kiểm tra câu trả lời này ra:

Đối với tôi, hai dòng này phải ở đó để nó hoạt động và thay đổi màu sắc:

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

PS: nhưng nó chỉ có sẵn từ Android 21


4

Hãy thử sử dụng một kiểu và đặt colorControlActivated quá mong muốn màu ProgressBar.

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

Sau đó, đặt chủ đề của ProgressBar sang phong cách mới.

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

3

Thêm vào chủ đề hoạt động của bạn, mục colorControlActivated , ví dụ:

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

Áp dụng kiểu này cho Hoạt động của bạn trong tệp kê khai:

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

2

Bạn có thể làm điều này với một hộp thoại tùy chỉnh khá dễ dàng, sử dụng lại xml từ các câu trả lời khác:

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

Chỉ cần làm điều này:

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

Bạn có thể sử dụng một kiểu để thay đổi màu của tiến trình như bên dưới

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

và sử dụng nó trong ProgressBar như dưới đây

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

Hy vọng nó giúp.


1

Đối với tất cả những người tự hỏi làm thế nào để tăng tốc độ tiến bộ tùy chỉnh

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

Nó nhận giá trị màu từ Res / Values ​​/ Colors.xml -> colorAccent nếu bạn thay đổi, màu ProgressBar của bạn cũng thay đổi.


0

Bộ android:indeterminateDrawable="@drawable/progress_custom_rotate"

Sử dụng mã dưới đây cho thanh tiến trình vòng tròn tùy chỉnh

Sao chép mã bên dưới và tạo "Progress_custom_rotate.xml" trong thư mục 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

Bạn có thể thay đổi màu thanh tiến trình của mình bằng mã bên dưới:

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

Nếu tôi có một mảng màu thì sao?
Hoàng tử
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.