重铸安卓荣光——双向滑块增强

痛点:

公司打算做安卓软件,最近在研究安卓,打算先绘制样式

研究发现安卓并不像前端有那么多组件库,甚至有些基础的组件都需要自己实现,记录一下自己实现的组件

成品展示

上面一条是谷歌提供的双向滑块,下面是对双向滑块的增强,加了百分比以及刻度线

滑块

RangeSlider

先来认识下谷歌提供的RangeSlider,小黄在使用过程中,了解到他一些属性,在此也分享给打架

  • trackColorActive:滑动条区间颜色,也就是两个滑块之间显示绿色的部分

  • trackColorInactive:滑动条底色,两个滑块外的颜色,默认是灰色,上面的效果图就是默认颜色

  • thumbColor:滑块颜色

  • thumbRadius:滑块半径

  • thumbStrokeColor:滑块边框颜色

  • thumbStrokeWidth:滑块边框粗细

  • thumbElevation:滑块阴影效果,值越大越明显

  • haloColor:滑块点击时,弹出更大的框,上面效果图选中时橙色部分

  • haloRadius:更大框的半径

  • labelBehavior:选中滑块气泡效果

    • floating:气泡效果会溢出该RangeSlider
    • withinBounds:气泡效果在RangeSlider里面
    • gone:不使用气泡
    • visible:气泡总是可见

    从上到下分别是floatingwithinBoundsgonevisible可以通过观察背景色来区分

    4滑块

  • values:滑块的取值范围,不定义该选项的话则变成单滑块

    可以在res/values/array.xml中添加最大值和最小值,这里注意滑块默认最小值是0,最大值是1还需要配合valueTovalueFrom属性来设置,否则会报错

    <resources><array name="default_values"><item>0</item> <!-- 初始最小值 --><item>100</item> <!-- 初始最大值 --></array>
    </resources>
    

具体代码

      <com.google.android.material.slider.RangeSliderandroid:layout_width="match_parent"android:layout_height="wrap_content"app:values="@array/default_values"android:valueTo="100f"android:valueFrom="0f"app:trackColorActive="@color/count_green"app:thumbColor="@color/white"app:thumbStrokeColor="@color/count_green"app:thumbStrokeWidth="2dp"app:thumbElevation="5dp"app:haloColor="@color/transparent_orange"app:labelBehavior="floating"/>

RangeSlider增强

接下来要对RangeSlider最增强,绘制他的刻度线和百分比,直接上代码

public class CustomRangeSlider extends RangeSlider {private Paint paint;public CustomRangeSlider(Context context) {super(context);init();}public CustomRangeSlider(Context context, AttributeSet attrs) {super(context, attrs);init();}public CustomRangeSlider(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {paint = new Paint();paint.setColor(Color.BLACK);paint.setStrokeWidth(2);}@Overrideprotected synchronized void onDraw(Canvas canvas) {int tickCount = 11; // 刻度线的数量setPadding((int) UiUtils.dp2px(getContext(),15),0,(int) UiUtils.dp2px(getContext(),15),0);float trackWidth = getWidth() - getPaddingStart() - getPaddingEnd();float tickSpacing = trackWidth / (tickCount - 1);for (int i = 0; i < tickCount; i++) {float x = getPaddingStart() + i * tickSpacing;float height;if (i % 2 == 0) {height = (float) getHeight() / 2 + getThumbRadius();String text = i * 10 + "%";paint.setTextSize(UiUtils.dp2px(getContext(),13)); // 设置文字大小float textWidth = paint.measureText(text); // 计算文字宽度canvas.drawText(text, x - textWidth / 2,getHeight(), paint); // 绘制文字在刻度线底部}else {height = (float) getHeight() / 2 + (float) getThumbRadius() / 2;}canvas.drawLine(x, (float) getHeight() /2, x, height, paint);}super.onDraw(canvas);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2814701.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用空闲电脑免费搭建一个私人的网盘

如果你也有一台空闲电脑&#xff0c;可以使用它来搭建一个私人的网盘。 这里使用的是飞梦云网盘&#xff1b; 服务端&#xff1a;下载 服务器文件使用hash校验进行储存&#xff0c;实现重复上传的文件秒传功能。 Fuse4Ui&#xff08;虚拟分区工具&#xff09;&#xff1a;下…

精品基于SpringBoot的体育馆场地预约赛事管理系统的设计与实现-选座

《[含文档PPT源码等]精品基于SpringBoot的体育馆管理系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#…

雾锁王国服务器要开服务器吗?

雾锁王国要开服务器吗&#xff1f;可以使用官方服务器&#xff0c;也可以自己搭建多人联机服务器&#xff0c;更稳定不卡&#xff0c;畅玩开黑。阿腾云分享atengyun.com给大家目前阿里云和腾讯云均提供雾锁王国服务器和一键搭建程序&#xff0c;成本26元即可搭建一台自己的雾锁…

初识Maven

介绍&#xff1a; web后端开发技术ApacheMaven是一个项目管理和构建工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的构建。安装&#xff1a;http://maven.apache.org/ Apache软件基金会&#xff0c;成立于19…

pdf转word文档怎么转?分享4种转换方法

pdf转word文档怎么转&#xff1f;在日常工作中&#xff0c;我们经常遇到需要将PDF文件转换为Word文档的情况。无论是为了编辑、修改还是为了重新排版&#xff0c;将PDF转为Word都显得尤为重要。那么&#xff0c;PDF转Word文档怎么转呢&#xff1f;今天&#xff0c;就为大家分享…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…

分布式锁的应用与疑惑

文章目录 一、为什么需要用分布式锁二、Redis实现分布式锁三、Zookeeper实现分布式锁 一、为什么需要用分布式锁 集群下&#xff0c;普通的锁&#xff0c;无法解决问题 集群下&#xff0c;保证安全需要使用分布式锁 二、Redis实现分布式锁 Redisson内部封装的RedLock实现分…

有哪些ai写作软件值得推荐?这篇文章告诉你

目前AI写作软件成为越来越多写作爱好者和专业作者的首选工具。随着人工智能技术的迅猛发展&#xff0c;在国内&#xff0c;也涌现出了许多实用且好用的AI写作神器。在本文中&#xff0c;我将为您介绍7个国内好用的AI写作软件&#xff0c;同时介绍它们的优点和使用特点。 一、爱…

RV32/64 特权架构 - 特权模式与指令

RV32/64 特权架构 - 特权模式与指令 1 特权模式2 特权指令2.1 mret&#xff08;从机器模式返回到先前的模式&#xff09;2.2 sret&#xff08;从监管模式返回到先前的模式&#xff09;2.3 wfi&#xff08;等待中断&#xff09;2.4 sfence.vma&#xff08;内存屏障&#xff09; …

高级语言期末2011级A卷(软件学院)

1.编写函数&#xff0c;判定正整数m和n&#xff08;均至少为2&#xff09;是否满足&#xff1a;数m为数n可分解的最小质因数&#xff08;数n可分解的最小质因数为整除n的最小质数&#xff09; 提示&#xff1a;判定m为质数且m是n的最小因数 #include <stdio.h> #include…

【C语言】linux内核ipoib模块 - ipoib_ib_post_receive

一、中文注释 用于以太网接口&#xff08;InfiniBand&#xff09;上的IP over IB&#xff08;IPoIB&#xff09;设备的Linux内核函数&#xff0c;负责将接收缓冲区&#xff08;一个包&#xff09;提交到网络设备的队列中等待数据到达。下面是中文注释版本的函数代码&#xff1…

数仓模型设计方法论

在当今大数据时代&#xff0c;数据已经成为企业最重要的资产之一。而数据仓库作为企业数据管理和分析的核心基础设施&#xff0c;其设计方法论对于企业的数据治理和决策分析至关重要。本文将探索数仓模型设计的方法论&#xff0c;帮助读者更好地理解和应用数仓模型设计。 一、…

nodejs 实现pdf与图片互转

PDF转图片 效果图 代码 const path require(path); const pdf require(pdf-poppler); const fs require(fs); // PDF文件路径 const pdfFilePath ./path/test.pdf; // 转换选项 const opts { format: png, // 输出图片格式&#xff0c;可以是 jpeg, png, ppm…

华为ipv6 over ipv4 GRE隧道配置

思路&#xff1a; PC1访问PC2时&#xff0c;会先构造源ipv6为2001:1::2&#xff0c;目的IPV6为2001:2::2的ipv6报文&#xff0c;然后查看PC1的路由表&#xff0c;发送到R1&#xff0c;r1接收后&#xff0c;以目的IPV6地址2001:2::2查询IPV6路由表&#xff0c;出接口为tun0/0/0…

如何运行github上的项目

为了讲明白这个过程&#xff0c;特意做了一个相当来说比较好读懂的原理图&#xff0c;希望和我一样初学的小伙伴也能很快上手哈&#x1f60a; 在Github中找到想要部署的项目&#xff0c;这里以BartoszJarocki/CV&#xff08;线上简历&#x1f4c4;&#xff09;项目为例 先从头…

在两台CentOS 7服务器上部署MinIO集群---准确

环境说明&#xff1a; 2台Centos7服务器 IP地址分别为172.16.1.9和172.16.1.10 1. 创建minio用户和目录 在两台服务器上执行以下命令&#xff1a; sudo useradd -m -d /app/minio minio sudo mkdir -p /app/minioData sudo mkdir -p /app/minio/logs sudo chown -R mini…

Golang embed 库全面解析:从基础到高级应用

Golang embed 库全面解析&#xff1a;从基础到高级应用 引言Golang的 embed&#xff1a;简化资源管理提升可移植性与便利性适用场景的拓展 embed 库的基本概念embed 库的工作原理使用 embed 的基本语法访问嵌入资源的方法embed 的限制 如何使用 embed嵌入单个文件嵌入整个目录结…

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL&#xff08;Light and Versatile Graphics Library&#xff0c;轻量级通用图形库&#xff09;是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c…

疫情物资智能管理:Java与SpringBoot的实践

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

基于MQTT协议实现微服务架构事件总线

一、场景描述 昨天在博客《客户端订阅服务端事件的实现方法》中提出了利用websocket、服务端EventEmitter和客户端mitt实现客户端订阅服务端事件&#xff0c;大大简化了客户端对服务端数据实时响应的逻辑。上述方案适用于单服务节点的情形。 对于由服务集群支撑的微服务架构&…