Ползунок 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()));
}