1.seekBar继承了ProgressBar,ProgressBar所支持的xml属性和方法都适用于seekBar,以下是一些常用属性:
属性 | 含义 |
---|---|
max | 设置该进度条的最大值 |
progress | 设置该进度条的已完成进度值 |
progressDrawable | 自定义进度条drawable |
thumb | 自定义滑块drawable |
max | 设置该进度条的最大值 |
2.简单代码示例:
<SeekBar
android:id="@+id/skr_brightness"
android:layout_width="@dimen/w280"
android:layout_height="@dimen/h26"
android:layout_gravity="center|start"
android:layout_marginStart="@dimen/w358"
android:max="255"
android:progress="50" />
这时会得到一个简单的简单的进度条为0~255,当前进度为50的拖动条
3.但仅仅如此往往满足不了我们的需求,接下来试着改变进度条颜色,设置颜色可能会想到其父类的ProgressBar和progressBackgroundTint属性,我们先看一下效果:
<SeekBar
android:id="@+id/skr_brightness"
android:layout_width="@dimen/w280"
android:layout_height="@dimen/h26"
android:layout_gravity="center|start"
android:layout_marginStart="@dimen/w358"
android:max="255"
android:progressTint="#E00009"
android:progressBackgroundTint="#0045AD"
android:progress="50"/>
细心的会发现设置的色值与实际显示的色值不符,而且此时我们设置利用maxHeight和minHeight设置进度条高度也不生效,这是使用方式不对导致的,应在progressDrawable属性中进行自定义。
4.正确做法是创建一个bg_seekbar_drawable的自定义drawable,,如下
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="#E00009"/>
<item android:id="@android:id/progress">
<clip android:drawable="#0045AD"/>
</item>
</layer-list>
其中background是进度条右侧颜色,progress指的是左侧颜色,值得注意的是progress的属性必须设置成上述格式,否则会导致无论如何拖动,整个进度条只会显示#E00009色值的颜色。
5.在设置好progressDrawable属性后我们在使用maxHeight和minHeight调整进度条高度,你会发现此时可以正常调整高度了。
<SeekBar
android:id="@+id/skr_brightness"
android:layout_width="@dimen/w280"
android:layout_height="@dimen/h26"
android:layout_gravity="center|start"
android:layout_marginStart="@dimen/w358"
android:max="255"
android:progressDrawable="@drawable/bg_seekbar_drawable"
android:maxHeight="@dimen/w4"
android:minHeight="@dimen/w4"
android:progress="50" />
6.如果觉得系统自带的滑块样式不好看,也可以使用自定义图片。
<SeekBar
android:id="@+id/skr_brightness"
android:layout_width="@dimen/w280"
android:layout_height="@dimen/h26"
android:layout_gravity="center|start"
android:layout_marginStart="@dimen/w358"
android:max="255"
android:progressDrawable="@drawable/bg_seekbar_drawable"
android:maxHeight="@dimen/w4"
android:minHeight="@dimen/w4"
android:progress="50"
android:thumb="@mipmap/icon_houvr" />
7.接着就是SeekBar的事件了,SeekBar.OnSeekBarChangeListener 有三个对应的方法:
onProgressChanged:进度发生改变时会触发
onStartTrackingTouch:按住SeekBar时会触发
onStopTrackingTouch:放开SeekBar时触发
我们只需要根据需求重写这三个方法就行,就拿调节亮度来说,我们只需在onProgressChanged中实时改变亮度即可
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
Log.i(TAG, "当前亮度:$progress")
// 设置亮度值
BrightnessUtils.setBrightness(progress)
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
这样简单的亮度拖动条就完成了。