一个滑块可变色的Seekbar

devtools/2025/3/3 17:18:42/

因项目需要,做一个如下图的滑动条,要求如下:

1、滑块跟着进度条改变颜色

2、滑块有白色边和内部颜色组成

大体思路,就是背景需要UI按照需求提供,然后变色时,根据滑动回调动态设置对应的颜色。

直接上代码

xml里面的布局

                <SeekBarandroid:id="@+id/atmosphere_lamp_progress_color_seekbar"style="@style/atmosphere_lamp_progress_color_horizontal"android:layout_width="@dimen/dimen578dp"android:layout_height="@dimen/dimen32dp"android:layout_marginStart="@dimen/dimen4dp"android:layout_marginTop="@dimen/dimen98dp"android:background="@null"android:max="63"android:paddingVertical="@dimen/dimen7dp"android:paddingStart="@dimen/dimen16dp"android:paddingEnd="@dimen/dimen16dp"android:splitTrack="false" />

使用到的style

    <style name="atmosphere_lamp_progress_color_horizontal"><item name="android:indeterminateOnly">false</item><item name="android:thumb">@drawable/atmosphere_thumb_bg</item><item name="android:progressDrawable">@drawable/bg_color_palette</item><!-- 滑动条颜色--><item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item><item name="android:minHeight">@dimen/dimen44dp</item><item name="android:maxHeight">@dimen/dimen44dp</item></style>

如果想让进度条有背景和进度两个滑动条,可以给progressDrawable添加一个layer-list即可

<?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="@drawable/slider_ambient_lighting_n_white" /><item android:id="@android:id/progress" android:drawable="@drawable/slider_ambient_lighting_f_white" /></layer-list>

滑块分层我是使用了atmosphere_thumb_bg用到了layer-list

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/seekbar_thumb_out"/><itemandroid:width="@dimen/dimen28dp"android:height="@dimen/dimen28dp"android:top="@dimen/dimen2dp"android:left="@dimen/dimen2dp"android:drawable="@drawable/seekbar_thumb_in"/></layer-list>
seekbar_thumb_out如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!--设置大小--><size android:width="@dimen/dimen32dp"android:height="@dimen/dimen32dp"/><!--设置圆角--><corners android:radius="@dimen/dimen18dp"/><!--设置背景颜色--><solid android:color="@color/white"/><!--    &lt;!&ndash;设置边框&ndash;&gt;-->
<!--    <stroke android:width="2dp" android:color="@color/colorAccent"/>--></shape>
seekbar_thumb_in如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/seekbar_thumb_out"/><itemandroid:width="@dimen/dimen28dp"android:height="@dimen/dimen28dp"android:top="@dimen/dimen2dp"android:left="@dimen/dimen2dp"android:drawable="@drawable/seekbar_thumb_in"/></layer-list>

以上都是布局,要想动态显示还是有如下java代码:

给seekbar注册监听

    //SeekBar回调private SeekBar.OnSeekBarChangeListener seekChangeListener = new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {if (fromUser) {switch (seekBar.getId()) {case R.id.atmosphere_lamp_progress_color_seekbar://氛围灯颜色LogUtils.d(TAG, "无极调色 == " + progress);setThumbColor(seekBar, progress + 1, 255);break;default:break;}}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {switch (seekBar.getId()) {case R.id.atmosphere_lamp_progress_color_seekbar:LogUtils.i(TAG, "氛围灯———颜色 抬手 == " + lampBrightnessValue);break;default:break;}}};

封装的setThumbColor设置动态颜色

    //设置无极变色滑块颜色private void setThumbColor(SeekBar seekBar, int value, int alphaValue) {LayerDrawable layerDrawable = (LayerDrawable) seekBar.getThumb();GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.getDrawable(1);GradientDrawable gradientDrawable0 = (GradientDrawable) layerDrawable.getDrawable(0);gradientDrawable.setColor(Myapplication.getApplication().getResources().getColor(atmosphereLampHelp.valueToColor(value), null));gradientDrawable.setAlpha(alphaValue);gradientDrawable0.setAlpha(alphaValue);}

里面的颜色值,可以按照自己要求一一对应即可。


http://www.ppmy.cn/devtools/164235.html

相关文章

Oracle 数据库基础入门(二):深入理解表的约束

在 Oracle 数据库的学习进程中&#xff0c;表的约束是构建健壮、准确且高效数据库的关键要素。约束如同数据库的 “规则守护者”&#xff0c;它通过对数据的限制&#xff0c;确保了数据的完整性和一致性&#xff0c;就如同交通规则保障道路上车辆行驶的有序性一样。对于 Java 全…

【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题

最近&#xff0c;linux服务器遇到一个奇怪的问题&#xff0c;能ping通github&#xff0c;但是无法clone git项目&#xff0c;尝试了各种大模型&#xff0c;都提到代理啥的问题&#xff0c;发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false&#xff0c;才解决问题…

c# 代码规范

在C#编程中&#xff0c;遵循良好的命名规范是提高代码可读性和可维护性的关键。C# 社区普遍接受一套命名约定&#xff0c;这些约定有助于团队成员之间更好地协作&#xff0c;同时也便于其他开发者阅读和理解你的代码。以下是一些基本的C#命名规范&#xff1a; 在C#编程中&…

React低代码项目:问卷编辑器 I

问卷编辑器 Date: February 20, 2025 4:17 PM (GMT8) 目标 完成问卷编辑器的设计和开发完成复杂系统的 UI 组件拆分完成复杂系统的数据结构设计 内容 需求分析技术方案设计开发 注意事项&#xff1a; 需求指导设计&#xff0c;设计指导开发。前两步很重要页面复杂的话&…

Python中文自然语言处理库SnowNLP

SnowNLP 介绍 SnowNLP 是一个基于 Python 的中文自然语言处理库&#xff0c;专为处理中文文本而设计。它受到 TextBlob 的启发&#xff0c;但与 TextBlob 不同的是&#xff0c;SnowNLP 没有使用 NLTK&#xff0c;所有的算法都是自己实现的&#xff0c;并且自带了一些训练好的字…

在Spring Boot项目中将中文转换为拼音:从入门到实践

文章目录 在Spring Boot项目中将中文转换为拼音&#xff1a;从入门到实践引言一、拼音转换的背景与需求1.1 拼音转换的应用场景1.2 技术选型 二、Spring Boot集成pinyin4j2.1 添加依赖2.2 创建拼音工具类2.3 在Spring Boot中使用工具类2.4 编写测试用例 三、实践中的注意事项3.…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(4)

详解&#xff08;4&#xff09; 初始化配置转储结构&#xff08;config_dump&#xff09; if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))! NGX_OK){ngx_destroy_pool(pool);return NULL;}ngx_rbtree_init(&cycle->config_dump_rb…

kafka-web管理工具cmak

一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…