Я пытаюсь создать округленный индикатор выполнения. Это то, чего я хочу достичь
Есть серое цветное кольцо фона. Поверх него появляется индикатор выполнения синего цвета, который перемещается по круговой траектории от 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% прогресс с красной стрелкой, показывающей направление.
Я хочу переместить синий индикатор в круговом пути, как и ожидалось.
android
progress-bar
Саурав Шривастава
источник
источник
Ответы:
Вот мои два решения.
Короткий ответ:
Вместо создания
layer-list
я разделил его на два файла. Один дляProgressBar
и один для его фона.Это
ProgressDrawable
файл (@drawable папка): circular_progress_bar.xmlИ это для его
background
(@drawable папка): circle_shape.xmlИ в конце внутри макета, над которым вы работаете:
Вот результат:
Длинный ответ:
Используйте пользовательское представление, которое наследует
android.view.View
Вот полный проект на GitHub
источник
setProgress
метод, а затем передать значение. google.com/…android:fromDegrees="270" android:toDegrees="270"
решил это !! Большое спасибо!Я сделал простым способом:
Пожалуйста, проверьте скриншот для того же.
CustomProgressBarActivity.java :
activity_custom_progressbar.xml :
custom_progressbar_drawable.xml :
Надеюсь, что это поможет вам.
источник
Я написал подробный пример на круговой индикатор выполнения в Android здесь на моем блоге demonuts.com . Вы также можете найти полный исходный код и пояснения.
Вот как я сделал круговой индикатор выполнения с процентом внутри круга в чистом коде без какой-либо библиотеки.
сначала создайте нарисованный файл с именем
circular.xml
Теперь в вашем
activity_main.xml
добавлении следующее:В
activity_main.xml
я использовал одну кругового изображение с белым фоном , чтобы показать белый фон вокруг процентов. Вот изображение:Вы можете изменить цвет этого изображения, чтобы установить собственный цвет вокруг процентного текста.
Теперь, наконец, добавьте следующий код
MainActivity.java
:Если вы хотите сделать горизонтальный индикатор выполнения, перейдите по этой ссылке, у него есть много ценных примеров с исходным кодом:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar
источник
Я реализовал библиотеку с открытым исходным кодом на GitHub CircularProgressBar, которая делает именно то, что вы хотите, самым простым способом:
ИСПОЛЬЗОВАНИЕ
Чтобы создать круговой ProgressBar, добавьте CircularProgressBar в XML-макет и добавьте библиотеку CircularProgressBar в проектор, или вы также можете получить его через Gradle:
XML
Вы должны использовать следующие свойства в вашем XML для изменения вашего CircularProgressBar.
Свойства:
app:progress
(целое число) >> по умолчанию 0app:progressbar_color
(цвет) >> по умолчанию ЧЕРНЫЙapp:background_progressbar_color
(цвет) >> СЕРЫЙ по умолчаниюapp:progressbar_width
(размерность) >> по умолчанию 7dpapp:background_progressbar_width
(размерность) >> по умолчанию 3dpЯВА
Разместите или загрузите эту библиотеку здесь >> https://github.com/lopspower/CircularProgressBar
источник
Вот простой пользовательский вид для отображения прогресса круга. Вы можете изменить и оптимизировать больше, чтобы подходить для вашего проекта.
Пример использования
XML
Котлин
результат
источник
Я новичок, поэтому я не могу комментировать, но думал поделиться ленивым исправлением. Я также использую оригинальный подход Педрама и столкнулся с той же проблемой Lollipop. Но у alanv в другом посте было исправление в одну строку. Это своего рода ошибка или недосмотр в API21. Буквально просто добавьте
android:useLevel="true"
в свой круг прогресс xml. Новый подход Педрама - все еще правильное исправление, но я только думал, что разделяю ленивое исправление также.источник
Попробуйте этот метод, чтобы создать растровое изображение и установить его в качестве изображения.
источник
https://github.com/passsy/android-HoloCircularProgressBar - один из примеров библиотеки, которая делает это. Как заявил Tenfour04, он должен быть несколько нестандартным, поскольку он не поддерживается прямо из коробки. Если эта библиотека ведет себя не так, как вы хотите, вы можете раскошелиться и изменить детали, чтобы она работала по вашему вкусу. Если вы реализуете что-то, что другие затем могут использовать повторно, вы можете даже отправить запрос на извлечение, чтобы вернуть его обратно!
источник
@Pedram, ваше старое решение действительно отлично работает и в lollipop (и лучше, чем новое, так как его можно использовать везде, в том числе и в удаленных представлениях), просто измените свой
circular_progress_bar.xml
код следующим образом:источник
источник
С Материальные компоненты библиотеки можно использовать
ProgressIndicator
сWidget.MaterialComponents.ProgressIndicator.Circular.Determinate
стилем.Что-то вроде:
Вы можете использовать эти атрибуты:
circularRadius
: определяет радиус кругового индикатора прогрессаtrackColor
: цвет, используемый для дорожки прогресса. Если не определено, он будет установлен наindicatorColor
и применятьandroid:disabledAlpha
из темы.indicatorColor
: единственный цвет, используемый для индикатора в детерминированном / неопределенном режиме. По умолчанию используется основной цвет темыИспользуйте
progressIndicator.setProgressCompat((int) value, true);
для обновления значения в индикаторе.Примечание: требуется как минимум версия
1.3.0-alpha01
.источник
1.3.0-alpha01
.+ Изменить
в
для второго Sahpe с
id="@android:id/progress
надеюсь, что это работает
источник