Как создать круговой прогрессбар в Android, который вращается на нем?

154

Я пытаюсь создать округленный индикатор выполнения. Это то, чего я хочу достичь

Есть серое цветное кольцо фона. Поверх него появляется индикатор выполнения синего цвета, который перемещается по круговой траектории от 0 до 360 в течение 60 или любого количества секунд.

введите описание изображения здесь

Вот мой пример кода.

<ProgressBar
            android:id="@+id/ProgressBar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            style="?android:attr/progressBarStyleLarge"
            android:indeterminateDrawable="@drawable/progressBarBG"
            android:progress="50"
            />

Чтобы сделать это, в отрисовываемой «progressBarBG» я создаю список слоев, а внутри этого списка я даю два элемента, как показано.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape
            android:shape="ring"
            android:innerRadius="64dp"
            android:thickness="8dp"
            android:useLevel="false">

        <solid android:color="@color/grey" />
    </shape>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape
                android:shape="ring"
                android:innerRadius="64dp"
                android:thickness="8dp"
                android:useLevel="false">

            <solid android:color="@color/blue" />
        </shape>
    </clip>
</item>

Теперь первое серое кольцо генерируется нормально. Синее кольцо, однако, начинается слева от нарисованного и идет вправо так же, как работает линейный индикатор. Вот как он показывает на 50% прогресс с красной стрелкой, показывающей направление.

введите описание изображения здесь

Я хочу переместить синий индикатор в круговом пути, как и ожидалось.

Саурав Шривастава
источник
9
Не уверен, почему за вас проголосовали, кажется немного несправедливым.
БенджаминПол
1
Я посмотрел, прежде чем отправлять этот вопрос. Я нашел некоторые ответы, но они не сработали для того, чего я пытаюсь достичь. Может быть, кто-то отверг меня, думая, что это дублирующий пост.
Саурав Шривастава
1
может быть, это может указать вам правильное направление github.com/grmaciel/two-level-circular-progress-bar
gmemario
1
Вы можете использовать эту библиотеку github.com/emre1512/CircleProgressBar
Запдос
1
Не могли бы вы вознаградить одного из щедрых людей, которые пытались найти для вас решение за его / ее большие усилия, приняв один из предоставленных ответов?
Генеральный директор tech4lifeapps

Ответы:

324

Вот мои два решения.

Короткий ответ:

Вместо создания layer-listя разделил его на два файла. Один для ProgressBarи один для его фона.

Это ProgressDrawableфайл (@drawable папка): circular_progress_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->

        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

И это для его background(@drawable папка): circle_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="2.5"
    android:thickness="1dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

И в конце внутри макета, над которым вы работаете:

<ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:indeterminate="false"
        android:progressDrawable="@drawable/circular_progress_bar"
        android:background="@drawable/circle_shape"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:progress="65" />

Вот результат:

результат 1

Длинный ответ:

Используйте пользовательское представление, которое наследует android.view.View

результат 2

Вот полный проект на GitHub

М. Реза Насирлоо
источник
@Pedram Как мне установить процент в строке прогресса? Как например, в настоящее время это будет 50%. Как мне установить 50% на индикатор?
@ 20 центов, прочитайте документацию, вы должны получить ссылку на свой индикатор выполнения и вызвать его setProgressметод, а затем передать значение. google.com/…
М. Реза Насирлоо
Я сошел с ума, пытаясь найти правильные значения, красные десятки тем stackoverflow, только чтобы найти решение здесь .. android:fromDegrees="270" android:toDegrees="270"решил это !! Большое спасибо!
Энрике де Соуза
@Skynet Да, и я не пытался это исправить , потому что я предпочитаю , чтобы создать полностью настроить один с продлением View Class developer.android.com/training/custom-views/index.html
М. Реза Nasirloo
1
@MimArmand Привет, спасибо, на самом деле он снова начинает работать в обновлении lollipop 5.1, и эта строка исправляет проблему для API 21.
М. Реза Насирлоо
23

Я сделал простым способом:

Пожалуйста, проверьте скриншот для того же.

CustomProgressBarActivity.java :

public class CustomProgressBarActivity extends AppCompatActivity {

    private TextView txtProgress;
    private ProgressBar progressBar;
    private int pStatus = 0;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_progressbar);

        txtProgress = (TextView) findViewById(R.id.txtProgress);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (pStatus <= 100) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setProgress(pStatus);
                            txtProgress.setText(pStatus + " %");
                        }
                    });
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    pStatus++;
                }
            }
        }).start();

    }
}

activity_custom_progressbar.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.skholingua.android.custom_progressbar_circular.MainActivity" >


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/custom_progressbar_drawable"
            android:secondaryProgress="0" />


        <TextView
            android:id="@+id/txtProgress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/progressBar"
            android:layout_centerInParent="true"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </RelativeLayout>



</RelativeLayout>

custom_progressbar_drawable.xml :

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-90"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="270" >

    <shape
        android:shape="ring"
        android:useLevel="false" >
        <gradient
            android:centerY="0.5"
            android:endColor="#FA5858"
            android:startColor="#0099CC"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

Надеюсь, что это поможет вам.

Хирен Патель
источник
Привет Хирен, я пытаюсь отобразить только два цвета в представлении. Красный и зеленый. Но я также вижу некоторую смесь красного и зеленого в круге. Как я могу удалить это?
Локеш Пандей
20

Я написал подробный пример на круговой индикатор выполнения в Android здесь на моем блоге demonuts.com . Вы также можете найти полный исходный код и пояснения.

Вот как я сделал круговой индикатор выполнения с процентом внутри круга в чистом коде без какой-либо библиотеки.

введите описание изображения здесь

сначала создайте нарисованный файл с именем circular.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/secondaryProgress">
        <shape
            android:innerRadiusRatio="6"
            android:shape="ring"
            android:thicknessRatio="20.0"
            android:useLevel="true">


            <gradient
                android:centerColor="#999999"
                android:endColor="#999999"
                android:startColor="#999999"
                android:type="sweep" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="270"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="270">

            <shape
                android:innerRadiusRatio="6"
                android:shape="ring"
                android:thicknessRatio="20.0"
                android:useLevel="true">


                <rotate
                    android:fromDegrees="0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:toDegrees="360" />

                <gradient
                    android:centerColor="#00FF00"
                    android:endColor="#00FF00"
                    android:startColor="#00FF00"
                    android:type="sweep" />

            </shape>
        </rotate>
    </item>
</layer-list>

Теперь в вашем activity_main.xml добавлении следующее:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dialog"
    tools:context="com.example.parsaniahardik.progressanimation.MainActivity">

    <ProgressBar

        android:id="@+id/circularProgressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:indeterminate="false"
        android:max="100"
        android:progress="50"
        android:layout_centerInParent="true"
        android:progressDrawable="@drawable/circular"
        android:secondaryProgress="100"
        />

    <ImageView
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:background="@drawable/whitecircle"
        android:layout_centerInParent="true"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:gravity="center"
        android:text="25%"
        android:layout_centerInParent="true"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="20sp" />

</RelativeLayout>

В activity_main.xmlя использовал одну кругового изображение с белым фоном , чтобы показать белый фон вокруг процентов. Вот изображение:

введите описание изображения здесь

Вы можете изменить цвет этого изображения, чтобы установить собственный цвет вокруг процентного текста.

Теперь, наконец, добавьте следующий код MainActivity.java:

import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.DecelerateInterpolator;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    int pStatus = 0;
    private Handler handler = new Handler();
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        Drawable drawable = res.getDrawable(R.drawable.circular);
        final ProgressBar mProgress = (ProgressBar) findViewById(R.id.circularProgressbar);
        mProgress.setProgress(0);   // Main Progress
        mProgress.setSecondaryProgress(100); // Secondary Progress
        mProgress.setMax(100); // Maximum Progress
        mProgress.setProgressDrawable(drawable);

      /*  ObjectAnimator animation = ObjectAnimator.ofInt(mProgress, "progress", 0, 100);
        animation.setDuration(50000);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.start();*/

        tv = (TextView) findViewById(R.id.tv);
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (pStatus < 100) {
                    pStatus += 1;

                    handler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            mProgress.setProgress(pStatus);
                            tv.setText(pStatus + "%");

                        }
                    });
                    try {
                        // Sleep for 200 milliseconds.
                        // Just to display the progress slowly
                        Thread.sleep(8); //thread will take approx 1.5 seconds to finish
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

Если вы хотите сделать горизонтальный индикатор выполнения, перейдите по этой ссылке, у него есть много ценных примеров с исходным кодом:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar

Парсания Хардик
источник
15

Я реализовал библиотеку с открытым исходным кодом на GitHub CircularProgressBar, которая делает именно то, что вы хотите, самым простым способом:

Gif демо CircularProgressBar

ИСПОЛЬЗОВАНИЕ

Чтобы создать круговой ProgressBar, добавьте CircularProgressBar в XML-макет и добавьте библиотеку CircularProgressBar в проектор, или вы также можете получить его через Gradle:

compile 'com.mikhaellopez:circularprogressbar:1.0.0'

XML

<com.mikhaellopez.circularprogressbar.CircularProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:background_progressbar_color="#FFCDD2"
    app:background_progressbar_width="5dp"
    app:progressbar_color="#F44336"
    app:progressbar_width="10dp" />

Вы должны использовать следующие свойства в вашем XML для изменения вашего CircularProgressBar.

Свойства:

  • app:progress (целое число) >> по умолчанию 0
  • app:progressbar_color (цвет) >> по умолчанию ЧЕРНЫЙ
  • app:background_progressbar_color (цвет) >> СЕРЫЙ по умолчанию
  • app:progressbar_width (размерность) >> по умолчанию 7dp
  • app:background_progressbar_width (размерность) >> по умолчанию 3dp

ЯВА

CircularProgressBar circularProgressBar = (CircularProgressBar)findViewById(R.id.yourCircularProgressbar);
circularProgressBar.setColor(ContextCompat.getColor(this, R.color.progressBarColor));
circularProgressBar.setBackgroundColor(ContextCompat.getColor(this, R.color.backgroundProgressBarColor));
circularProgressBar.setProgressBarWidth(getResources().getDimension(R.dimen.progressBarWidth));
circularProgressBar.setBackgroundProgressBarWidth(getResources().getDimension(R.dimen.backgroundProgressBarWidth));
int animationDuration = 2500; // 2500ms = 2,5s
circularProgressBar.setProgressWithAnimation(65, animationDuration); // Default duration = 1500ms

Разместите или загрузите эту библиотеку здесь >> https://github.com/lopspower/CircularProgressBar

lopez.mikhael
источник
Я пытаюсь это действительно круто, но теперь нашел слушателя, который изменил анимацию. Вы знаете какой-нибудь путь?
Имран Чоудхури,
@ lopez.mikhael Эй, у тебя есть идеи, как добавить изображение между циркулярами?
hyperfkcb
@DeniseTan вы можете просто использовать FrameLayout или RelativeLayout для этого.
lopez.mikhael
8

Вот простой пользовательский вид для отображения прогресса круга. Вы можете изменить и оптимизировать больше, чтобы подходить для вашего проекта.

class CircleProgressBar @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
    private val backgroundWidth = 10f
    private val progressWidth = 20f

    private val backgroundPaint = Paint().apply {
        color = Color.LTGRAY
        style = Paint.Style.STROKE
        strokeWidth = backgroundWidth
        isAntiAlias = true
    }

    private val progressPaint = Paint().apply {
        color = Color.RED
        style = Paint.Style.STROKE
        strokeWidth = progressWidth
        isAntiAlias = true
    }

    var progress: Float = 0f
        set(value) {
            field = value
            invalidate()
        }

    private val oval = RectF()
    private var centerX: Float = 0f
    private var centerY: Float = 0f
    private var radius: Float = 0f

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        centerX = w.toFloat() / 2
        centerY = h.toFloat() / 2
        radius = w.toFloat() / 2 - progressWidth
        oval.set(centerX - radius,
                centerY - radius,
                centerX + radius,
                centerY + radius)
        super.onSizeChanged(w, h, oldw, oldh)
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawCircle(centerX, centerY, radius, backgroundPaint)
        canvas?.drawArc(oval, 270f, 360f * progress, false, progressPaint)
    }
}

Пример использования

XML

<com.example.androidcircleprogressbar.CircleProgressBar
    android:id="@+id/circle_progress"
    android:layout_width="200dp"
    android:layout_height="200dp" />

Котлин

class MainActivity : AppCompatActivity() {
    val TOTAL_TIME = 10 * 1000L

    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        timeOutRemoveTimer.start()
    }

    private var timeOutRemoveTimer = object : CountDownTimer(TOTAL_TIME, 10) {
        override fun onFinish() {
            circle_progress.progress = 1f
        }

        override fun onTick(millisUntilFinished: Long) {
            circle_progress.progress = (TOTAL_TIME - millisUntilFinished).toFloat() / TOTAL_TIME
        }
    }
}

результат

Фан Ван Линь
источник
5

Я новичок, поэтому я не могу комментировать, но думал поделиться ленивым исправлением. Я также использую оригинальный подход Педрама и столкнулся с той же проблемой Lollipop. Но у alanv в другом посте было исправление в одну строку. Это своего рода ошибка или недосмотр в API21. Буквально просто добавьте android:useLevel="true"в свой круг прогресс xml. Новый подход Педрама - все еще правильное исправление, но я только думал, что разделяю ленивое исправление также.

Мяо Лю
источник
3

Попробуйте этот метод, чтобы создать растровое изображение и установить его в качестве изображения.

private void circularImageBar(ImageView iv2, int i) {


    Bitmap b = Bitmap.createBitmap(300, 300,Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(b); 
    Paint paint = new Paint();

        paint.setColor(Color.parseColor("#c4c4c4"));
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawCircle(150, 150, 140, paint);

        paint.setColor(Color.parseColor("#FFDB4C"));
        paint.setStrokeWidth(10);   
        paint.setStyle(Paint.Style.FILL);
        final RectF oval = new RectF();
        paint.setStyle(Paint.Style.STROKE);
        oval.set(10,10,290,290);

        canvas.drawArc(oval, 270, ((i*360)/100), false, paint);
        paint.setStrokeWidth(0);    
        paint.setTextAlign(Align.CENTER);
        paint.setColor(Color.parseColor("#8E8E93")); 
        paint.setTextSize(140);

        canvas.drawText(""+i, 150, 150+(paint.getTextSize()/3), paint); 

        iv2.setImageBitmap(b);
}
мани
источник
2

https://github.com/passsy/android-HoloCircularProgressBar - один из примеров библиотеки, которая делает это. Как заявил Tenfour04, он должен быть несколько нестандартным, поскольку он не поддерживается прямо из коробки. Если эта библиотека ведет себя не так, как вы хотите, вы можете раскошелиться и изменить детали, чтобы она работала по вашему вкусу. Если вы реализуете что-то, что другие затем могут использовать повторно, вы можете даже отправить запрос на извлечение, чтобы вернуть его обратно!

Travis
источник
Я тоже видел эту библиотеку, но не хотел использовать другую стороннюю библиотеку только для этой небольшой задачи. Тем не менее, я собираюсь попробовать оба метода, упомянутых вами и Tenfour04, чтобы увидеть, какой из них работает для меня, и ответить здесь.
Саурав Шривастава
1
@SauravSrivastava: я также ищу похожую анимацию в моем приложении. Вы нашли решение? Если да, пожалуйста, поделитесь решением.
Basher51
@Travis Пожалуйста, посмотрите этот вопрос - stackoverflow.com/questions/44801280/…
Кумар
2

@Pedram, ваше старое решение действительно отлично работает и в lollipop (и лучше, чем новое, так как его можно использовать везде, в том числе и в удаленных представлениях), просто измените свой circular_progress_bar.xmlкод следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"> <!-- Just add this line -->
        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>
мим
источник
2
Отличное замечание на Android: useLevel = "true" !!! Вы помогли мне решить важную проблему на Android 5! Большое спасибо!
ДмитрийКанунниковофф
2
package com.example.ankitrajpoot.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;


public class MainActivity extends Activity {

    private ProgressBar spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner=(ProgressBar)findViewById(R.id.progressBar);
        spinner.setVisibility(View.VISIBLE);
    }
}

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<ProgressBar
    android:id="@+id/progressBar"

    android:layout_width="48dp"
    style="?android:attr/progressBarStyleLarge"
    android:layout_height="48dp"
    android:indeterminateDrawable="@drawable/circular_progress_bar"
    android:indeterminate="true" />
</RelativeLayout>





<?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="56dip"
            android:height="56dip" />

        <gradient
            android:type="sweep"
            android:useLevel="false"
            android:startColor="@android:color/transparent"
            android:endColor="#1e9dff"
            android:angle="0"
            />

    </shape>
</rotate>
Анкит Раджпут
источник
Вы можете добавить описание предлагаемого решения.
il_raffa
2

С Материальные компоненты библиотеки можно использовать ProgressIndicatorс Widget.MaterialComponents.ProgressIndicator.Circular.Determinateстилем.

Что-то вроде:

<com.google.android.material.progressindicator.ProgressIndicator
    style="@style/Widget.MaterialComponents.ProgressIndicator.Circular.Determinate"
    app:indicatorColor="@color/...."
    app:trackColor="@color/...."
    app:circularRadius="64dp"/>

Вы можете использовать эти атрибуты:

  • circularRadius: определяет радиус кругового индикатора прогресса
  • trackColor: цвет, используемый для дорожки прогресса. Если не определено, он будет установлен на indicatorColorи применять android:disabledAlphaиз темы.
  • indicatorColor: единственный цвет, используемый для индикатора в детерминированном / неопределенном режиме. По умолчанию используется основной цвет темы

введите описание изображения здесь

Используйте progressIndicator.setProgressCompat((int) value, true);для обновления значения в индикаторе.

Примечание: требуется как минимум версия 1.3.0-alpha01.

Габриэле Мариотти
источник
Какова необходимая зависимость от библиотеки?
Бикрам
@bikram Библиотека компонентов материалов, предоставляемая Google.
Габриэле Мариотти
Я добавил реализацию 'com.google.android.material: material: 1.1.0' в build.gradle, но ProgressIndicator по-прежнему не отображается.
Бикрам
@bikram Как описано в ответе: требуется как минимум версия 1.3.0-alpha01.
Габриэле Мариотти
1

+ Изменить

android:useLevel="false"

в

android:useLevel="true"

для второго Sahpe с id="@android:id/progress

надеюсь, что это работает

ASHMIL HUSSAIN K
источник