Як змінити колір у круговій смузі прогресу?


147

Я використовую кругову панель прогресу на Android. Я хочу змінити колір цього. я використовую

"?android:attr/progressBarStyleLargeInverse" 

стиль. Отже, як змінити колір смужки прогресу.

Як налаштувати стиль? Крім того, яке визначення стилю?

Відповіді:


163

У папку res / drawable введіть це:

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> 

Встановіть startColorі endColorзгідно з вашим вибором.

Тепер встановіть це progress.xmlв ProgressBarbackgound.

Подобається це

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

1
його не працює, коли я використовую спеціальний діалог як заголовок перегляду списку. Чи потрібен інший підхід?
Панкай Кумар

22
Це створює зелену форму кільця, але власне спінер ProgressBar все ще видно.
mdupls

чи є спосіб змусити прядильні кольори рухатися лише в одному напрямку?
thepoosh

48
Замість того, щоб встановлювати фон за допомогою "android: background", використовуйте "android: indeterminateDravable =" @ dravable / progress ", як підкреслено іншою відповіддю
baekacaek

1
Використовуйте значення android: startColor = "# 447a29" android: endColor = "# 227a29", різні значення, щоб воно не утворювало статичного кола.
Абхішек Сенгупта

137

Для API 21 і вище. Просто встановіть властивість indeterminateTint. Подібно до:

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

Для підтримки пристроїв pre-API 21:

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

2
з style="?android:attr/progressBarStyle"не працює
користувач25

Якщо у мене є масив кольорів і я хочу встановити кольоровий масив на кожній панелі прогресу
Принц

Для мене це спрацювало чудово, просто щоб змінити хід кольору дзвінка в
барі

Дякуємо, що наголосили на аспекті API
JamisonMan111

Якщо я поміщую цей колір, він забарвлює обертове вирізане кільце, але все це, тому воно перетворюється на повне кільце, щоб ви не бачили його рухатися
Лукас Занелла,

135

1.Перше Створіть XML-файл у папці, що малюється, під ресурсом

з назвою "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. потім зробіть панель прогресів, використовуючи складний фрагмент

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

Привіт Мухамеде, я використовую спеціальне колесо прогресу, я намагався змінити колір колеса, що перебуває в процесі виконання. Мене пробують, Після натискання на кнопку починається прогрес. Я встановив колір як зелений. Коли прогрес досягне 100%, я хочу, щоб він почався заново, лише цього разу його колір повинен бути червоним. Але я не міг цього зробити .. якщо можливо, будь ласка, допоможіть мені
harikrishnan

1
Дякую. Це працює на 100%. встановити progress.xml для android: indeterminateDravable
Лео Нгуен

Коли я спробував це, це створило густу межу кола. Будь-які ідеї, як зменшити кордон?
Теяс

Привіт Техасе, Спробуйте змінити цю лінію для android: thickRatio = "8" всередині progress.xml. Можна спробувати різні значення. Сподіваюся, це спрацює.
Muhamed Riyas M

Це працює, але замість двох кілець, що обертаються один проти одного, я отримую лише одне кільце. Будь-яке виправлення для цього?
AX

66

Ви можете змінити колір програмно за допомогою цього коду:

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

Якщо ви хочете змінити колір панелі прогресу ProgressDialog, ви можете скористатися цим:

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

        }
    });

Гей, як я з’єднаю панель прогресу ProgressDialog із Progress.xml ??
Meghal Agrawal

Якщо у мене є масив кольорів і я хочу встановити кольоровий масив на кожній панелі прогресу
Принц

36

Щоб додати відповідь Дато, я вважаю, що SRC_ATOP є кращим фільтром для множення, оскільки він краще підтримує альфа-канал.

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

1
На 2.3.x це дає вам міцне заповнене коло, де МНОГО зберігає прозорість.
azdev

Якщо у мене є масив кольорів і я хочу встановити кольоровий масив на кожній панелі прогресу
Принц

28

android: indeterminateTint = "@ color / progressbar"


просто використовуйте вище атрибут у рядку прогресу: indeterminateTint = ваш колір
Bhupinder Singh

Найкраща відповідь, і вона підтримала б також всі версії
Pankaj Kumar

Це все, що вам потрібно, а не ці шалені відповіді. Хоча інші виграють від повного блоку коду.
StarWind0

7
indeterminateTint доступний для API 21 або новішої версії. Якщо це працює для вас, приголомшливо!
Енді Вайнштейн


14
android:indeterminateTint="@color/yellow"

Це робота для мене, просто додайте цей рядок до вашого коду xml прогресу


12

Це для мене робота.

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

4
Доступний з рівня 21 API
viplezer

11

Щоб налаштувати круговий ProgressBar, нам потрібно створити indeterminateDravable, щоб показати спеціальну панель ходу

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

Нам потрібно включити схему малювання в панель прогресу так само, як нижче:

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

rotateтег раніше відсутній shape. Без нього
Ренан Бандейра

@RenanBandeira ви можете покращити відповідь, якщо її правильна
Akshay Mukadam

9

для мене тема не працювала з accentColor. Але це працювало з colorControlActivate

    <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

перевірити цю відповідь :

для мене ці два рядки повинні були бути там, щоб він міг працювати і змінювати колір:

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

PS: але доступний лише для android 21


4

Спробуйте скористатися стилем та встановити colorControlActivate занадто бажаний колір ProgressBar.

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

Потім встановіть тему ProgressBar на новий стиль.

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

3

Додайте до теми своєї діяльності, елемент colorControlActivate , наприклад:

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

Застосуйте цей стиль до своєї активності в маніфесті:

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

2

Ви можете зробити це за допомогою спеціального діалогового вікна досить легко, використовуючи xml з інших відповідей:

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

Просто зробіть це:

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

Ви можете використовувати стиль для зміни кольору прогресу, як показано нижче

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

і використовувати його в ProgressBar, як показано нижче

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

Сподіваюся, це допомагає.


1

Для всіх, хто цікавиться, як підвищити швидкість користувальницького прогресу

  <?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, якщо ви змінюєте його, також змінюється і ваш колір кольору бар.


0

Встановити android:indeterminateDrawable="@drawable/progress_custom_rotate"

Використовуйте нижче код для спеціальної кругової смуги прогресу кільця

Скопіюйте нижче код і створіть "progress_custom_rotate.xml" у папці Dravable

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

Ви можете змінити колір панелі прогресу за допомогою наведеного нижче коду:

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

Якщо у мене тоді кольоровий масив?
Принц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.