В этом уроке мы реализуем SeekBar в простом приложении. Как обычно, пролистаем теорию и перейдем к практике.
Виджет SeekBar в Android
По своей сути виджет SeekBar
является расширением ProgressBar
, но с функционалом перетягивания индикатора текущей позиции влево или вправо. Примером использования этого виджета в системе Android является управления громкостью или управление прогрессом воспроизведения музыки в Android плеере.
Подобно ProgressBar
, виджет SeekBar
использует два свойства: android:max
и android:progress
.
Для отслеживания прогресса используется интерфейс SeekBar.OnSeekBarChangeListener
, предоставляющий методы для выполнения обработки различных событий в SeekBar
:
- Метод
onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
используется для уведомления о каких-либо изменениях на уровнеSeekBar
. - Метод
onStartTrackingTouch(SeekBar SeekBar)
используется для оповещения о том, что пользователь прикоснулся к индикатору прогресса. - Метод
onStopTrackingTouch(SeekBar SeekBar)
используется для оповещения о том, что пользователь закончил взаимодействие с индикатором прогресса.
Пример использования SeekBar
Макет с виджетом SeekBar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<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" tools:context=".MainActivity"> <SeekBar android:id="@+id/seekBar" android:layout_width="350dp" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:max="100" android:paddingTop="40dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/seekBar" android:layout_centerHorizontal="true" android:paddingTop="50dp" android:text="" /> </RelativeLayout> |
Обратите внимание, что с помощью атрибута android:max="100"
мы указали максимальное значение, которое позволяет виджет SeekBar
. Можете изменить этот показатель в своей программе, например, на 10.
Ниже представлен листинг класса MainActivity
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package ua.com.prologistic; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.SeekBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private SeekBar seekBar; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); seekBar = (SeekBar) findViewById(R.id.seekBar); textView = (TextView) findViewById(R.id.textView); // инициализируем TextView текущей позицией прогресса виджета SeekBar String text = seekBar.getProgress() + " из " + seekBar.getMax(); textView.setText(text); // устанавливаем слушатель для реакции на различные события в SeekBar seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { int progress = 0; // метод отвечает за изменения прогресса // булевый параметр fromUser будет true, если прогресс был изменен пользователем // булевый параметр fromUser будет false, если прогресс был изменен системой @Override public void onProgressChanged(SeekBar seekBar, int progressValue, boolean fromUser) { progress = progressValue; } // никак не реагируем на начало движения индикатора прогресса @Override public void onStartTrackingTouch(SeekBar seekBar) {} // когда пользователь отпустил индикатор изменения прогресса @Override public void onStopTrackingTouch(SeekBar seekBar) { // значение прогресса отображаем в TextView String resultText = progress + " из " + seekBar.getMax(); textView.setText(resultText); } }); } } |
Результат выполнения приложения с виджетом SeekBar
в Android.
Следите за обновлениями раздела Разработка под Андроид.