当前位置: 首页 > news >正文

android seekbar显示刻度

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.xdnf.cn/news/1452925.html

相关文章:

  • Python_occ 学习记录 | 细观建模(2)
  • 【C语言】第二课 位运算
  • QT6 配置 Copilot插件
  • Pycharm 试用
  • Spring简单的读取和存储对象
  • 君正T31学习(7)- 启动流程
  • 当有鹿机器人读懂城市呼吸的韵律——具身智能如何重构户外清洁生态
  • 2025变现打法:AI+IP实现高效变现|创客匠人
  • 第十四届蓝桥杯青少组C++国赛[2023.5.28]第二部分编程题(4、 数独填数)
  • JS中正则表达式的运用
  • android Thread线程—HandlerThread
  • 汽车v型推力杆总成三维5自由度性能及疲劳测试系统
  • 追觅科技举办2025「敢梦敢为」发布会,发布超30款全场景重磅新品
  • 【iOS】 懒加载
  • 每日工作计划管理工具:核心功能详解
  • 《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
  • UE5 制作游戏框架的部分经验积累(持续更新)
  • Mybatis入门、操作数据、配置xml映射、数据封装
  • 深入探讨AI三大领域的核心技术、实践方法以及未来发展趋势,结合具体代码示例、流程图和Prompt工程实践,全面展示AI编程的强大能力。
  • leetcode21.合并两个有序链表
  • 来自AI的背包系统
  • solar应急响应-7月
  • 怎样让外网计算机访问局域网计算机?通过公网地址访问不同内网服务的设置方法
  • Web 与 Nginx 网站服务介绍与nginx安装
  • 泛型-泛型方法
  • C++工程实战入门笔记10-面向对象之静态成员变量和成员函数、构造函数和析构函数
  • 【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 联软科技:以“韧性安全”守护数字世界,致敬抗战胜利80周年的坚韧精神
  • vite与webpack对比
  • ATT层MTU大小