- ProgressBar — Индикатор прогресса
- Основы
- Стилизация
- Индикатор с текстом
- Анимация ObjectAnimator
- Дополнительное чтение
- ProgressBar (Horizontal) — горизонтальный индикатор прогресса
- Основы
- Отдельный поток
- Пунктирный ProgressBar
- Режим Indeterminate
- Настройка через XML
- Вертикальный индикатор прогресса
- verticalprogressbar.xml
- verticalprogressbar2.xml
- Круговые индикаторы прогресса
- Индикатор с текстом
- Программное создание индикатора
- Анимация ObjectAnimator
- Дополнительное чтение
- Radial progress bar android
- Adding Android ProgressBar
- Android ProgressBar Attributes
- Android ProgressBar Updating Progress
- Android ProgressBar Material Style Application Level
- Android ProgressBar Material Styles
- Custom progress bar style
- Applying custom style to ProgressBar element
- Custom progress bar output
- Android ProgressBar Secondary Progress
- Android Horizontal ProgressBar Custom Drawable
- Custom drawable for horizontal progress bar
- Custom style for horizontal or determinate progress bar
- Applying custom style and theme to ProgressBar element
- Custom horizontal progress bar output
- Android Custom Circular or Indeterminate ProgressBar
- Custom drawable for indeterminate progress bar
- Custom style uses custom drawable for indeterminate progress bar
- Applying custom indeterminate progress bar style
- Custom indeterminate progress bar output
- About
ProgressBar — Индикатор прогресса
Основы
Компонент ProgressBar (Индикатор прогресса) применяется в тех случаях, когда пользователю нужно показать, что программа не зависла, а выполняет продолжительную работу.
Находится в категории Widgets.
Студия предлагает несколько видов индикаторов: ProgressBar и ProgressBar (Horizontal). В свою очередь компонент имеет несколько модификаций и их отличия заложены в стилях, если посмотреть XML-описание компонентов. Стили постоянно меняются, поэтому проще выбрать атрибут style и посмотреть предлагаемые варианты из выпадающего списка на текущий момент.
Методы для работы с ProgressBar:
- setProgress() — устанавливает заданное значение индикатора прогресса;
- getProgress() — возвращает текущее значение индикатора прогресса;
- incrementProgressBy() — устанавливает величину дискретизации приращения значения индикатора;
- setMax() — устанавливает максимальное значение величины прогресса.
Круговые индикаторы Normal, Small и Large можно просто разместить на экране, и они будут бесконечно выводить анимацию вращения без единой строчки кода.
Как правило, «бесконечный» индикатор выводят в нужный момент, а когда задача выполнена, то его скрывают. Видимость можно установить через XML и программно.
В коде используется метод setVisibility()
Сейчас проекты в студии используют Material Design, поэтому цвет индикатора будет соответствовать ресурсу colorAccent.
Можно переопределить цвет, если вы хотите отказаться от этой связи с colorAccent, задав свой стиль.
Подключаем через тему.
Другая настройка связана с Tint — оттенками цвета (Android 5.0).
Стилизация
Если вам не нравится внешний вид стандартных индикаторов, то можете придумать свой. Есть два варианта для реализации этой цели. В первом случае можно подготовить готовый png-файл (spin_custom.png) и поместить его в ресурс, например, в папку res/drawable.
Затем в этой же папке создаём xml-файл spinner_png.xml с таким содержанием:
Теперь в разметке активности можно определять ProgressBar так:
Если запустить проект, то увидим такой индикатор:
В реальности индикатор выглядит немного корявым, подёргиваясь на экране. Кроме того, изображение можно улучшить, уменьшив количество цветов и сократив размер файла.
Второй вариант выглядит предпочтительней. На этот раз мы обойдёмся без графических файлов, а будем использовать только XML-разметку. В этой же папке поместим файл spinner_ring.xml следующего содержания:
Теперь в разметке активности пропишем строки:
Получим следующий результат:
Индикатор с текстом
К сожалению, индикатор не выводит текст во время работы, что не очень удобно. Можно создать свой ProgressBar из TextView или создать свой компонент на основе ProgressBar. Другой простой способ — наложить текстовый блок прямо на индикатор, используя RelativeLayout. Пример для пояснения.
Код, чтобы увидеть работу индикатора. При каждом щелчке кнопки значение индикаторов увеличиваются на 10 процентов.
Индикаторы прогресса также можно использовать в заголовках приложения у старых устройств, а также в ActionBar и ToolBar у новых устройств.
Компонент постоянно дорабатывается. Например, в Android 8 появились новые методы isAnimating(), getMin(), setMin().
Анимация ObjectAnimator
Можно подключить готовую анимацию для визуализации компонента.
Дополнительное чтение
Material ProgressBar — статья про создание собственного индикатора в стиле Material Design
Indeterminate — серия статей на тему создания индикаторов прогресса, ссылка на первую часть.
Источник
ProgressBar (Horizontal) — горизонтальный индикатор прогресса
Основы
Компонент ProgressBar (Horizontal) (Индикатор прогресса) применяется в тех случаях, когда пользователю нужно показать, что программа не зависла, а выполняет продолжительную работу.
Находится в категории Widgets.
Студия предлагает несколько видов индикаторов: ProgressBar и ProgressBar (Horizontal). В свою очередь компонент имеет несколько модификаций и их отличия заложены в стилях, если посмотреть XML-описание компонентов. Стили постоянно меняются, поэтому проще выбрать атрибут style и посмотреть предлагаемые варианты из выпадающего списка на текущий момент.
Методы для работы с ProgressBar:
- setProgress() — устанавливает заданное значение индикатора прогресса;
- getProgress() — возвращает текущее значение индикатора прогресса;
- incrementProgressBy() — устанавливает величину дискретизации приращения значения индикатора;
- setMax() — устанавливает максимальное значение величины прогресса.
Горизонтальный индикатор обычно используют, чтобы показать индикатор в действии. При длительной операции пользователь видит, что полоска индикатора постоянно увеличивается.
Нужно задать верхнюю границу диапазона max и начальное значение progress и затем программно работать с этими данными.
Атрибут android:secondaryProgress=»50″ создаёт эффект буфера, когда рисуется ещё одна полоска, опережающая основной цвет. Ей можно управлять через метод setSecondaryProgress().
Отдельный поток
Выполнение длительных операций предпочтительнее производить в отдельном потоке. Android имеет специальный класс Handler для создания фоновых потоков и их взаимодействия с пользовательским интерфейсом. Либо используется AsyncTask и другие способы выполнения в другом потоке.
Запустим индикатор через кнопку.
Будем усыплять поток на небольшой промежуток времени.
Часто нужно выводить не круглое число 100, а что-то другое (размер файла). Тогда нужно сделать небольшие вычисления, чтобы выводились данные в процентах.
Допустим размер файла 365 Мб. Запускаем и смотрим — вся жизнь пробежала перед глазами, ну или год.
Пунктирный ProgressBar
Изменим обычную линию на пунктир. Создадим файл res/drawable/dash_progressbar.xml.
Подключим через атрибут progressDrawable.
Режим Indeterminate
Существует режим неопределённости (indeterminate), когда индикатор работает постоянно. Для этого нужно установить соответствующие атрибуты.
При запуске индикатор прогресса без всякого кода будет выводить бесконечную анимацию.
Переключение между режимами программно — метод setIndeterminate(boolean indeterminate).
Аккуратнее с атрибутом indeterminateOnly, если он будет установлен, то анимацию программно уже не приостановить. В этом случае просто не используйте атрибут. Несмотря на анимацию, индикатор по прежнему меняет свои показания. Если брать предыдущий пример с процентами и установить атрибуты, указанные выше (кроме indeterminateOnly), то программно можно остановить анимацию следующим образом.
Также часто используют изменение видимости — когда индикатор не нужен, его просто прячут.
Настройка через XML
Индикатор прогресса работает в стиле Material Design на Lollipop-устройствах и выше. На старых устройствах выводится другой цвет.
Можно задать свои настройки для цвета.
Для тонкой настройки компонента под себя следует использовать файл в ресурсах с использованием LayerDrawable. Файл ресурсов должен использовать системный идентификатор @android:id/background для фона, а также идентификатор @android:id/progress для самого индикатора. Также можно использовать ещё один необязательный идентификатор @android:id/secondaryProgress для дополнительного индикатора. Пример ниже.
Вертикальный индикатор прогресса
По умолчанию используется горизонтальный индикатор. Можно создать собственный индикатор с вертикальной ориентацией.
Рассмотрим пример с обычной вертикальной линией. Создадим файл res/drawable/vert_progressbar.xml.
Задействуем атрибут android:progressDrawable. Есть определённая сложность размещения компонента на экране. Хотя мы хотим видеть вертикальный индикатор, студия воспринимает его по-прежнему горизонтальным и в режиме дизайна отображает его соответствующим образом. Попробуем следующий вариант.
Код можно взять из примера с процентами. Там всё без изменений.
Вариант не слишком удобный, так как не интуитивен при визуальном размещении.
Другой вариант вертикального индикатора, который гораздо лучше справляется со своей задачей. Кроме того, индикатор будет не виде линии, а полноценным жирным прямоугольником. В папке res/drawable подготовим два файла:
verticalprogressbar.xml
verticalprogressbar2.xml
Разница между двумя файлами только в цвете, которым закрашивается индикатор во время работы. Я создал второй файл только для демонстрации программного изменения индикатора — когда значение индикатора достигнет отметки 50, то цвет поменяется на зелёный.
Код можно вставить после строчки из предыдущего примера:
Также можно использовать атрибут XML.
Круговые индикаторы прогресса
Несмотря на то, что компонент называется горизонтальным индикатором прогресса, мы уже изменили его на вертикальный. Но это не предел, мы можем сделать индикатор круговым.
Сначала покажу неудачный пример, который попался в интернете. Создадим файл res/drawable/circular_progressbar.xml.
Снова используем атрибут android:progressDrawable. Чтобы пример работал должным образом, нужно следить за размерами индикатора — ширина и высота должны быть одинаковыми. Если забыть об этом, то получим следующее.
Попробуем установить одинаковые размеры, а также добавить пунктир и градиент.
Для примера с обратным отсчётом я использовал индикатор с двумя drawable-ресурсами, используя shape с другими параметрами.
Индикатор с текстом
К сожалению, индикатор не выводит текст во время работы, что не очень удобно. Можно создать свой ProgressBar из TextView или создать свой компонент на основе ProgressBar. Другой простой способ — наложить текстовый блок прямо на индикатор, используя RelativeLayout. Пример для пояснения.
Код, чтобы увидеть работу индикатора. При каждом щелчке кнопки значение индикаторов увеличиваются на 10 процентов.
Программное создание индикатора
Данный способ уже устарел, так как через XML намного удобнее. Для общего развития.
Индикаторы прогресса также можно использовать в заголовках приложения у старых устройств, а также в ActionBar и ToolBar у новых устройств.
Компонент постоянно дорабатывается. Например, в Android 8 появились новые методы isAnimating(), getMin(), setMin().
Анимация ObjectAnimator
Можно подключить готовую анимацию для визуализации компонента.
Дополнительное чтение
Material ProgressBar — статья про создание собственного индикатора в стиле Material Design
Indeterminate — серия статей на тему создания индикаторов прогресса, ссылка на первую часть.
Источник
Radial progress bar android
September 21, 2017
Android ProgressBar is used to show progress of an operation to users. There are two types of progress bars and for each type android provides material styles.
If total duration it takes to complete an operation is known, the progress bar which is used to show progress of such operation is called determinate progress bar or horizontal progress bar.
If total duration it takes to complete an operation is unknown, the progress bar which is used to show progress of such operation is called indeterminate progress bar or circular progress bar.
In this post, you can find details on progress bar attributes, updating progress bar, progress bar material styles, custom material style, custom progress bar, custom horizontal progress bar, and custom circular or indeterminate progress bar.
Adding Android ProgressBar
To use progress bar, add ProgressBar element to layout xml as shown below. Attribute progress needs to be assigned some value to view progress bar. Details about progress bar attribute will be covered in the following sections.
To define indeterminate ProgressBar (circular progress bar), either set indeterminate attribute to true or use android non horizontal progress bar style. To define determinate ProgressBar (horizontal progress bar), do reverse.
Android ProgressBar Attributes
Some of the important progress bar attributes are described below.
- progress : is used to set progress value, your program needs to periodically update the progress so that progress bar reflects the progress of the operation it represents.
- indeterminate : is used to indicate type of progress bar, value true means indeterminate progress.
- indeterminateDrawable : is used to set drawable for indeterminate progress bar.
- indeterminateDuration : is used to set animation duration for indeterminate progress bar.
- indeterminateTint : is used to set tint of indeterminate progress bar progress indicator.
- progressBackgroundTint : is used to set progress indicator background
- progressTint : is used to set tint of progress indicator.
- progressDrawable : is used to set determinate progress bar drawable.
- min : is used to define minimum value.
- max : is used to define maximum value.
Android ProgressBar Updating Progress
As the purpose of the progress bar is to show the progress of an operation in your application, your program needs to update the progress bar with progress as it is available or periodically.
Below code shows how to update progress bar with progress, it uses RxJava observable which emits integers with 5 seconds delay. This code needs to be added to a method which handles the operation start event.
Android ProgressBar Material Style Application Level
Above screen shot shows progress bar when one of the material styles is applied to application. You can change progress bar color by setting colorAccent to the desired color as shown below and use it as application theme.
Android ProgressBar Material Styles
Android platform provides several material styles such as Widget.Material.ProgressBar.Horizontal, Widget.Material.ProgressBar, etc, but using app compact material styles provide backward compatibility. App compact material styles are Widget.AppCompat.ProgressBar.Horizontal and Widget.AppCompat.ProgressBar for indeterminate and determinate progress bar respectively.
Custom progress bar style
To set the ProgressBar background color, you can use progressBackgroundTint or colorControlNormal attributes. To set ProgressBar color, you can use progressTint or colorControlActivated. If you use colorControlNormal and colorControlActivated, apply the style to progress bar using theme attribute.
Applying custom style to ProgressBar element
Custom progress bar output
Similarly, you can customize theme for indeterminate progress bar as shown below.
Android ProgressBar Secondary Progress
To show secondary progress, first define color for secondary progress by setting secondaryProgressTint attribute to the desired color.
Then update secondaryProgress with secondary progress value like as shown below.
Android Horizontal ProgressBar Custom Drawable
You can define a drawable as xml resource and use it as custom drawable for horizontal or determinate progress bar.
Custom drawable for horizontal progress bar
Below layer list drawable is an example of custom drawable for horizontal progress bar. The layer list drawable defines three layers. First item is for background, second layer is for secondary progress and third layer is for progress. You need to make sure that android defined ids are used for each item in layer list.
Our example drawable xml for custom horizontal progress bar also uses standard color attributes such as colorControlNormal, colorControlActivated, and colorControlHighlight to set colors of progress bar background, progress, and secondary progress respectively so that color of our custom horizontal progress bar can be customized easily.
Custom style for horizontal or determinate progress bar
Applying custom style and theme to ProgressBar element
Custom horizontal progress bar output
Android Custom Circular or Indeterminate ProgressBar
Circular or indeterminate progress bar can be customized by providing custom drawable. You can define custom drawable as xml resource using layer list, shape and rotate. Our example drawable for indeterminate progress bar defines two rectangles and rotates them.
Custom drawable for indeterminate progress bar
Custom style uses custom drawable for indeterminate progress bar
Applying custom indeterminate progress bar style
Custom indeterminate progress bar output
About
Android app development tutorials and web app development tutorials with programming examples and code samples.
Источник