Android_SeekBar

本文最后更新于:2022年12月17日 中午

SeekBar

[TOC]

参考:

Seekbar介绍

Android seekBar 是progressBar 的修改版本,具有可拖动的拇指,用户可以在其中来回拖动拇指以设置当前进度值。我们可以在我们的安卓设备中使用控制栏,比如亮度控制、音量控制等。

它是重要的用户界面元素之一,它提供了在定义的范围内选择整数值的功能,例如 1 到 100。

通过在 SeekBar 中拖动拇指,我们可以来回滑动,在使用 android:minandroid:max 属性定义的最小和最大整数值之间选择一个值。

使用android:progress定义初始值。

在控件列表中有两种SeekBar可供选择,一种是连续的,一种是离散的。

image-20221129173639697

使用SeekBar

以两个SeekBar数据同步为例。

  1. 创建项目,打开activity_main.xml的Design界面,

  2. 在Widgets列表中有两种SeekBar可供选择,一种是连续的,一种是离散的。根据需要选择不同的类型。这里我们都选上并约束布局。

    image-20221129173639697

    • SeekBar连续

      <SeekBar
          android:id="@+id/seekBar2"
          android:layout_width="300dp"
          android:layout_height="40dp"
          android:max="100"
          android:progress="40"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintHorizontal_bias="0.5"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintVertical_bias="0.8" />
    • SeekBar离散

      <SeekBar
          android:id="@+id/seekBar"
          style="@style/Widget.AppCompat.SeekBar.Discrete"
          android:layout_width="300dp"
          android:layout_height="40dp"
          android:max="10"
          android:progress="4"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintVertical_bias="0.9" />
  3. 在对应的Activity或者Fragment中绑定控件

    class MainActivity : AppCompatActivity() {
        lateinit var seekBar: SeekBar
        lateinit var seekBar2: SeekBar
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            seekBar = findViewById(R.id.seekBar)
            seekBar2 = findViewById(R.id.seekBar2)
        }
    }
  4. 让两个控件的进度一致,在onCreate加入以下代码

    注意默认的TODO要删掉

    seekBar.progress = seekBar2.progress / 10
    
    seekBar.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
            seekBar2.progress = progress * 10 // 进度改变时触发
        }
        override fun onStartTrackingTouch(seekBar: SeekBar?) {
            // 开始拖动时触发
        }
        override fun onStopTrackingTouch(seekBar: SeekBar?) {
            // 结束拖动时触发
        }
    })
    
    seekBar2.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
        override fun onProgressChanged(seekBar1: SeekBar?, progress: Int, fromUser: Boolean) {
            seekBar.progress = progress / 10
        }
        override fun onStartTrackingTouch(seekBar: SeekBar?) {
        }
        override fun onStopTrackingTouch(seekBar: SeekBar?) {
        }
    })
  5. build并运行,发现实现了两个SeekBar数据同步的效果。


Android_SeekBar
https://yorick-ryu.github.io/Android/Android_SeekBar/
作者
Yorick
发布于
2022年11月29日
许可协议