Как заставить ProgressBar прекратить вращение?

Когда я добавляю горизонтальный ProgressBar, он ведет себя так, как ожидалось, - я устанавливаю значение прогресса и показывает его.

Однако, когда я добавляю ProgressBar (круговой), он вращается. И это так. В такой форме индикатор "wait wait" больше, чем любой индикатор выполнения, потому что значение прогресса не отображается.

Итак, мой вопрос (предполагая, что Progress в названии означает прогресс) - как остановить вращение и показать значение прогресса? Например, если я устанавливаю max до 100, а значение до 50, я ожидаю увидеть дугу полукруга.

Другими словами, как сделать круговой ProgressBar вести себя как горизонтальный ProgressBar, только с исключением формы?

Ответы

Ответ 1

Как прокомментировал тодацки, нет никакого метода выпечки. Вы можете попробовать ProgressWheel. Если ничего другого, это должно дать вам представление о том, как его реализовать.

Ответ 2

Так как Api 21 вы можете сделать что-то вроде этого: Предполагая, что ваш ProgressBar работает следующим образом:

 <ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/progressBarStyleLarge"
    android:id="@+id/progress_bar"
    android:layout_width="@dimen/item_width"
    android:layout_height="@dimen/item_height"
    android:clickable="false"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/progress"/>

и это progress.xml:

 

<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/colorGrayText"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

</shape>

Теперь вы можете сделать это на своем ProgressBar:

 ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        if (progressBar != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                RotateDrawable rotateDrawable = (RotateDrawable) progressBar.getIndeterminateDrawable();
                rotateDrawable.setToDegrees(0);
            }
        }

Ответ 3

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

На самом деле это проще, чем вы думаете, вам нужно установить пользовательский прогресс в XML файле внутри вашей выпадающей папки и обработать атрибуты "fromDegrees" и "toDegrees" из <rotate> :

Это код для custom_progress.xml(вы можете настроить свои, как вам нравится, но вы не должны изменять "fromDegrees" и "toDegrees" )

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape
            android:innerRadiusRatio="2.3"
            android:shape="ring"
            android:useLevel="false"
            android:type="sweep"
            android:thicknessRatio="15.0">
            <solid android:color="#0099ff"/>
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <rotate
            android:pivotX="50%"
            android:pivotY="50%"
            android:fromDegrees="-90"
            android:toDegrees="-90">
            <shape
                android:innerRadiusRatio="2.3"
                android:shape="ring"
                android:angle="0"
                android:type="sweep"
                android:thicknessRatio="15.0">
                <solid android:color="#e0e0e0"/>
            </shape>
        </rotate>
    </item>
</layer-list>

И для вашего индикатора выполнения вы должны установить следующие атрибуты:

<ProgressBar
    android:id="@+id/progressbar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:indeterminate="false"
    android:max="100"
    android:progress="20"
    android:progressDrawable="@drawable/custom_progress" />

Что здесь происходит, так это то, что прогресс начнется в градусе -90, который для меня является верхней частью представления индикатора прогресса и направо, и он будет продолжаться в той же степени, это приведет к тому, и заканчиваются в той же степени.

Примечание: Если вы установите 0 для "fromDegrees" и "toDegrees" , прогресс начнется с правой стороны круга.

Надеюсь, что это поможет людям с тем же требованием.