Программирование под Android. Бар загрузки ProgressBar.
Бар загрузки обычно показывает процент оставшийся от 100.
В Android есть стандартные индикаторы выполнения.
Выглядит это как “уменьшающаяся-увеличивающаяся” полоска.
Бар может также просто показывать, что идет загрузка. В таком виде это обычно крутящийся полукруг.
Хотя может быть и полоска, если указать ей атрибут “indeterminate”
android:indeterminate="true"
и стиль style="?android:attr/progressBarStyleHorizontal"
Как правило, мы используем режим неопределенного прогресса в индикаторе выполнения, когда мы не знаем, сколько времени займет операция или сколько работы сделано.
В неопределенном режиме фактический прогресс не будет показан, будет показана только циклическая анимация, чтобы указать, что происходит некоторый прогресс.
В макете бар загрузки может выглядеть так (.xml файл)
<ProgressBar
android:id="@+id/progressBar_igrok"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="@drawable/words_bg"
android:paddingRight="3dp"
android:paddingLeft="3dp"
android:layout_marginTop="5dp"
android:max="100"
android:indeterminate="false"
android:progress="50"
/>
У меня здесь подключено еще и фоновое изображение (в папке drawable называется words_bg).
Ширина 130dp
Высота по содержимому
Ну и внутренние и внешние отступы (padding и margin соответственно)
Ниже укажу некоторые из важных атрибутов индикатора выполнения:
• progress: используется для установки значения прогресса, ваша программа должна периодически обновлять прогресс, чтобы индикатор выполнения отображал ход выполнения операции, которую он представляет.
• indeterminate: используется для указания типа индикатора выполнения, значение true означает неопределенный прогресс.
• indeterminateDrawable: используется для установки рисования для неопределенного индикатора выполнения.
• indeterminateDuration: используется для установки продолжительности анимации для неопределенного индикатора выполнения.
• indeterminateTint: используется для установки оттенка индикатора прогресса неопределенного индикатора выполнения.
• progressBackgroundTint: используется для установки фона индикатора прогресса
• progressTint: используется для установки оттенка индикатора прогресса.
• progressDrawable: используется для установки детерминируемого индикатора выполнения.
• min: используется для определения минимального значения.
• max: используется для определения максимального значения.
Обычно, когда значение прогресса достигает 100, индикатор выполнения заполняется. Используя атрибут android: max, мы можем настроить это значение по умолчанию.
Другие стили индикатора выполнения, предоставляемые системой, включают:
· "?android:attr/progressBarStyleHorizontal"
· "?android:attr/progressBarStyleSmall"
· "?android:attr/progressBarStyleLarge"
· "?android:attr/progressBarStyleInverse"
· "?android:attr/progressBarStyleSmallInverse"
· "?android:attr/progressBarStyleLargeInverse"
Без указания стиля будет просто крутиться полукруг.
Другие атрибуты можно посмотреть в Android документации
https://developer.android.com/reference/android/widget/ProgressBar?hl=ru
Java файл (выдержки):
import android.widget.ProgressBar;
private ProgressBar progressBar_igrok;
// Ну и собственно наш бар
progressBar_igrok = (ProgressBar) findViewById(R.id.progressBar_igrok);
// Задаем значение (Понятное дело назначаем много раз с разными значениями в зависимости от степени загрузки)
progressBar_igrok.setProgress(100);
Вот так и все. Как видите все просто. Бар не автоматический, надо прописывать значения программой. Зачастую легче это сделать в процентах. Несложно вычислить процент загруженных данных. Например, в вашей базе данных 60 000 строк. Загружено предположим 41 100 строк.
41_100/60_000*100 = 68,5%
progressBar_igrok.setProgress(68,5); //(Понятное дело я написал схематично)
Не забывайте, что длительные загрузки осуществляют в фоновом потоке. Например с помощью AsyncTask
Если, вы хотите изменить цвет бара, то можно в файл styles.xml находящийся в папке values добавить
<style name="AppTheme.BlackAccent">
<item name="colorAccent">#000000</item> <!-- Цвет который вы хотите -->
</style>
В данном случае указываю черный цвет
А подключить можно так android:theme="@style/AppTheme.BlackAccent"
В макете это может выглядеть так
<ProgressBar
android:id="@+id/progressBar_igrok"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:paddingRight="3dp"
android:paddingLeft="3dp"
android:layout_marginTop="5dp"
android:indeterminate="true"
android:theme="@style/AppTheme.BlackAccent
/>
Если вам нужно узнать текущий прогресс, либо максимальное значение, вы можете воспользоваться
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_igrok);
Toast.makeText(this, "Прогресс - "
+ progressBar.getProgress()
+ "\nМаксимальное значение - "
+ progressBar.getMax(), Toast.LENGTH_SHORT).show();
Можно сделать и пользовательский бар с плавной прозрачностью
Создадим файл xml в папке drawable
Назовем его, например anim_file.xml
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%" >
<shape
android:innerRadiusRatio="4"
android:shape="ring"
android:thicknessRatio="5.333"
android:useLevel="false" >
<size
android:height="18dip"
android:width="18dip" />
<gradient
android:centerColor="#886688cc"
android:centerY="0.50"
android:endColor="#ff6688cc"
android:startColor="#006688cc"
android:type="sweep"
android:useLevel="false" />
</shape>
</animated-rotate>
Теперь подключим в макете нашу анимацию
<ProgressBar
android:id="@+id/progressBar_igrok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="3dp"
android:paddingLeft="3dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/anim_file"
android:layout_gravity="center"
/>
Подписывайтесь на канал, не пропустите новые публикации. Ставьте палец вверх. :-)