SeekBar简介

SeekBar是Android中的一个可交互UI组件,允许用户通过拖动滑块在特定范围内选择数值。继承自ProgressBar,但增加了用户手动调节功能,常用于音量控制、亮度调节等场景。

核心属性

android:maxHeight   // 背景高度
android:progressDrawable  // 进度条背景
android:thumb  // 滑块
android:splitTrack //  hua块 是否切割 seekbar 背景,默认true,会看到thumb周围区域被切割
android:thumbOffset // 控制滑块初始位置
android:paddingStart // 控制滑块左右空白部分

SeekBar滑块显示文字

公司的UI出了一个效果图,在seekbar的滑块上显示进度文字,效果如图:在这里插入图片描述
效果还是很不错的,可是实现起来难呀,咋办,别担心,慢慢干。
显示文字的需求可以通过自定义seekbar的thumb(滑块)的方式实现,也可以重写seekbar的ondraw方法实现,这里我选择第二种方式

package com.htfyun.systemui.widget;import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.widget.SeekBar;public class HtSeekBar extends SeekBar {private static final String TAG = "HtSeekBar";private Paint textPaint = new Paint();private Rect rect = new Rect();public HtSeekBar(android.content.Context context, android.util.AttributeSet attrs) {super(context, attrs);textPaint.setColor(Color.WHITE);textPaint.setTextSize(18);textPaint.setDither(false);}@Overrideprotected synchronized void onDraw(Canvas canvas) {super.onDraw(canvas);int save = canvas.save();String text = String.valueOf(getProgress());textPaint.getTextBounds(text, 0, text.length(), rect);float p = 1f * getProgress() / (getMax() - getMin());float x = (getWidth() - getPaddingStart()) * p - rect.centerX() + getPaddingStart() * (1 - p);float y = 1f * getHeight() / 2 - rect.centerY();canvas.drawText(text, x, y, textPaint);canvas.restoreToCount(save);}
}

写一个xml实现progressDrawable

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background"><shape><corners android:radius="10dp" /><solid android:color="#FFF" /><strokeandroid:width="1dp"android:color="#4B5563" /></shape></item><item android:id="@android:id/progress"><clip><shape><corners android:radius="10dp" /><solid android:color="#4B5563" /></shape></clip></item><item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="10dp" /><solid android:color="#4B5563" /></shape></clip></item>
</layer-list>

在layout布局文件中引用就是了

<com.htfyun.systemui.widget.HtSeekBarandroid:id="@+id/sbVolume"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignTop="@id/tvVolume"android:layout_alignBottom="@id/tvVolume"android:layout_marginRight="16dp"android:layout_toRightOf="@id/tvVolume"android:max="@integer/seekbarMax"android:maxHeight="16dp"android:progress="15"android:progressDrawable="@drawable/seekbar"android:splitTrack="false"android:thumb="@drawable/thumb" />

ok,完工。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96162.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96162.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96162.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高并发内存池】五、页缓存的设计

文章目录Ⅰ. page cache页缓存的结构设计Ⅱ. 完善central cache中的 get_span() 函数Ⅲ. 实现页缓存获取span对象的接口Ⅰ. page cache页缓存的结构设计 ​ 首先页缓存还是一个哈希桶的结构&#xff0c;但是和前两者不同的是&#xff0c;页缓存的哈希桶中存放的是一个或者多个…

Elasticsearch(text和keyword)区别分析

text:全文检索类型,经过分词处理,支持模糊匹配‌ keyword:精确匹配类型,适用于聚合、排序和过滤‌ text 1. 核心属性 ‌analyzer属性‌: 指定用于索引和搜索的分词器 默认使用标准分析器(Standard Analyzer) 示例:"analyzer": "ik_max_word"(中文…

通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机

当需要通过一台windows电脑上的vscode来ssh连接另一台电脑上的linux虚拟机进行远程操作&#xff0c;可以通过tailscale来实现。 Linux虚拟机上安装tailscale 由于挂代理下载仍然很慢&#xff0c;而清华镜像源又没有tailscale的软件包&#xff0c;所以可以通过下载 DEB 包安装…

[Upscayl图像增强] docs | 前端 | Electron工具(web->app)

链接&#xff1a;https://upscayl.org/docs&#xff1a;Upscayl Upscayl是一款桌面应用程序&#xff0c;允许用户使用人工智能放大和增强图像。 提供了一个用户友好的图形界面&#xff08;渲染器用户界面&#xff09;&#xff0c;用户可以选择图像或文件夹&#xff0c;从多种AI…

阿里云通义MoE全局均衡技术:突破专家负载失衡的革新之道

MoE模型的基本原理与核心价值 混合专家模型&#xff08;Mixture of Experts&#xff0c;MoE&#xff09;是当前AI大模型领域最重要的架构创新之一&#xff0c;其核心思想是通过多个“专家”网络协同处理输入数据&#xff0c;并由门控网络动态选择或组合各个专家的输出&#xf…

macOS中设置环境变量的各文件及作用域

在 macOS 中&#xff0c;~/.zshrc 和 ~/.bash_profile 是 Shell 的配置文件&#xff0c;用于设置环境变量、命令别名、启动命令等。它们在你每次打开终端时会被自动加载。文件对应 Shell作用~/.zshrcZsh&#xff08;macOS Catalina 及以后默认&#xff09;每次打开新的终端窗口…

【华为培训笔记】OptiX OSN 9600 设备保护专题

OptiX OSN 9600 设备保护专题 1、光层保护 定义 方式 应用

Python开篇撬动未来的万能钥匙 从入门到架构的全链路指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

LabVIEW 与 PLC 通讯

在工业自动化领域&#xff0c;LabVIEW 与 PLC 的通讯极为关键&#xff0c;它能实现设备间高效的数据交互与协同运作。接下来&#xff0c;将从应用场景、软件架构、功能实现、特点、开发问题及解决方法等层面展开阐述。 应用场景​ 智能工厂生产线监控系统中&#xff0c;LabVIE…

11-FreeRTOS任务相关的其他API函数

数据来源地址&#xff1a;gitee.com FreeRTOS任务相关的其他API函数 一、FreeRTOS任务相关的其他API函数介绍 1、FreeRTOS任务相关API函数介绍(部分常用的) 答&#xff1a; 二、任务状态查询API函数 1、获取任务优先级函数 答&#xff1a; UBaseType_t uxTaskPriorityGet…

ECMAScript(2)核心语法课件(Node.js/React 环境)

&#x1f4da; ECMAScript 核心语法课件&#xff08;Node.js/React 环境&#xff09; 1. 变量与作用域 变量声明方式 var&#xff1a;函数作用域&#xff0c;存在变量提升&#xff08;hoisting&#xff09;console.log(a); // undefined&#xff08;变量提升&#xff09; var a…

Selenium 页面加载超时pageLoadTimeout与 iframe加载关系解析

引言 在 Web 自动化测试中&#xff0c;处理页面加载超时是每个 Selenium 使用者都会遇到的挑战。特别是当页面包含 iframe 时&#xff0c;加载行为变得更加复杂。许多测试工程师困惑于&#xff1a;pageLoadTimeout 究竟能否控制 iframe 的加载&#xff1f;本文将深入探讨这一问…

AI面试将重塑企业招聘流程:从效率到精准度的全面升级

每年校招季&#xff0c;HR团队总被“面试官不够用”“简历太多看不清”“候选人放鸽子”等问题折磨。传统招聘流程冗长、成本高昂、标准参差&#xff0c;已难以适应快速变化的用人需求。而AI面试技术的突破&#xff0c;正在从底层逻辑上重塑招聘链条——从初筛到终面&#xff0…

IOC为什么交由spring容器管理?

根本原因&#xff1a;在 Spring 框架中&#xff0c;将控制反转&#xff08;IoC&#xff09; 交由 Spring 容器管理&#xff0c;是为了解决传统编程模式中 “对象创建与依赖管理耦合度高” 的核心问题&#xff0c;最终实现代码的低耦合、高可维护性、高可测试性。要理解这一设计…

Java反射与动态代理学习笔记

Java 反射与动态代理学习笔记反射概述反射允许对成员变量、成员方法和构造方法进行编程访问&#xff0c;提供了在运行时分析类和对象的能力。获取Class对象的三种方式方式代码示例说明Class.forName()Class.forName("全类名")通过类的全限定名获取Class对象对象.getC…

RAG提示词分解

RAG提示词分解 System Message # 智能问答助手&#xff08;RAG系统提示&#xff09;## 角色定义 您是"智能问答助手"&#xff0c;专门基于提供的上下文信息回答用户问题。## 核心规则 1. **严格基于上下文**&#xff1a;仅使用用户提供的<context>中的信息&…

YOLOv8 在 Intel Mac 上的 Anaconda 一键安装教程

YOLOv8 在 Intel Mac 上的 Anaconda 一键安装教程 本文适用于 Intel 芯片 Mac&#xff0c;通过 Anaconda 快速搭建 YOLOv8 环境&#xff0c;支持 CPU 推理与 Notebook 可视化。 全程一键安装&#xff0c;适合小白和入门用户。 &#x1f4d1; 目录 环境准备 一键安装脚本 运行…

Spring 日志文件

Spring 日志文件 文章目录Spring 日志文件日志有什么用&#xff1f;日志怎么用&#xff1f;自定义日志在程序中获取日志对象常用日志框架说明使用日志对象打印日志日志格式说明日志级别日志级别有啥用日志级别分类和使用日志持久化保存更简单的日志输出——lomboklombok更多注解…

五、误差反向传播法(上)

上一章中&#xff0c;我们介绍了神经网络的学习&#xff0c;并通过数值微分计算了神经网络的权重参数的梯度&#xff08;严格来说&#xff0c;是损失函数关于权重参数的梯度&#xff09;。数值微分虽然简单&#xff0c;也容易实现&#xff0c;但缺点是计算上比较费时间。本章我…

Rust Axum 快速上手指南(静态网页和动态网页2024版)

本文基于 Axum 0.7.5&#xff08;当前稳定版&#xff09;、tower-http 0.5.2、MiniJinja 0.7.2 编写&#xff0c;涵盖生产环境核心场景&#xff1a;tower-http Layer 叠加与数据传递、静态网页服务、MiniJinja 动态模板渲染&#xff0c;并重点解析请求 / 应答在多 Layer 中的流…