Элемент SeekBar выполняет роль ползунка, то есть шкалу делений, на которой мы можем менять текущую отметку.
Среди его атрибутов можно отметить следующие:
android:max: устанавливает максимальное значение
android:min: устанавливает минимальное значение
android:progress: устанавливает текущее значение, которое находится в диапазоне между минимальным и максимальным
Для управления SeekBar определяет ряд методов, из которых выделим следующие:
void setProgress(int progress): устанавливает текущее значение ползунка
void setMin(int min): устанавливает минимальное значение
void setMax(int max): устанавливает максимальное значение
void incrementProgressBy(int diff): увеличивает текущее значение на diff
int getMax(): возвращает максимальное значение
int getMin(): возвращает минимальное значение
int getProgress(): возвращает текущее значение
void setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener l): устанавливает слушателя изменения значения в SeekBar
Определим SeekBar в разметке layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<SeekBar
android:id="@+id/seekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:progress="20"
android:max="50"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Атрибут android:progress задает число 20 в качестве текущего значения ползунка, а атрибут android:max - максимально возможное
значение - число 50. В итоге мы получим следующий элемент:
Теперь используем метод setOnSeekBarChangeListener(), который позволяет установить обработчики событий изменения значения ползунка. Так, определим в файле layout следующий код:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<TextView android:id="@+id/seekBarValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:progress="20"
android:max="50"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/seekBarValue" />
</androidx.constraintlayout.widget.ConstraintLayout>
Здесь определен элемент TextView, который будет выводить текущее значение ползунка при его изменении.
И изменим код MainActivity:
package com.example.viewapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
public class MainActivity extends AppCompatActivity {
@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.seekBarValue);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(progress));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
В метод setOnSeekBarChangeListener() передается объект SeekBar.OnSeekBarChangeListener,
который позволяет установить три метода-обработчика:
onProgressChanged: срабатывает при перетаскивании ползунка по шкале. Передаваемый в метод параметр progress позволяет получить
новое значение ползунка, которое в данном случае передается в TextView для отображения на экране
onStartTrackingTouch: срабатывает при начале перетаскивания ползунка по шкале
onStopTrackingTouch: срабатывает при завершении перетаскивания ползунка по шкале
Также мы можем получить текущее значение ползунка, использовав метод getProgress():
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(seekBar.getProgress()));
}