SeekBar的使用以及进度条高度设置问题

本文围绕Android的SeekBar展开,介绍其继承自ProgressBar,常用属性及简单代码示例。指出设置进度条颜色和高度时常见问题及解决办法,即通过自定义drawable设置。还提到可自定义滑块样式,以及SeekBar事件处理,如重写相关方法实现亮度调节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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?) {
}

这样简单的亮度拖动条就完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值