Ползунок SeekBar
Елемент 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()));
}