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

Android原生实现单选

         六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。

一、效果图

实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的background样式实现,radioGroup嵌套radiobutton已经实现单选互斥,故直接监听其选中监听处理数据就好。

dp_0.5:就是0.5dp的意思,自行替换成自己的值。

dp_15:代表15dp
 

二、布局代码

  方案:采用的是RadioGroup嵌套RadioButton的方式。

  <RadioGroupandroid:id="@+id/rg_gender"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/monitor_remd"android:layout_marginLeft="@dimen/dp_24"android:layout_marginTop="@dimen/dp_10"android:orientation="horizontal"android:padding="1dp"><RadioButtonandroid:id="@+id/rb_press_h"android:layout_width="wrap_content"android:layout_height="@dimen/dp_25"android:button="@null"android:checked="true"android:drawableLeft="@drawable/checked_manage"android:drawablePadding="5dp"android:text="高压"android:textColor="@color/white"android:textSize="@dimen/sp_11" /><RadioButtonandroid:id="@+id/rb_press_l"android:layout_width="wrap_content"android:layout_height="@dimen/dp_30"android:layout_marginLeft="10dp"android:button="@null"android:drawableLeft="@drawable/checked_manage"android:drawablePadding="5dp"android:text="低压"android:textColor="@color/white"android:textSize="@dimen/sp_11" /><RadioButtonandroid:id="@+id/rb_press_rate"android:layout_width="wrap_content"android:layout_height="@dimen/dp_30"android:layout_marginLeft="10dp"android:button="@null"android:drawableLeft="@drawable/checked_manage"android:drawablePadding="5dp"android:text="心率"android:textColor="@color/white"android:textSize="@dimen/sp_11" /></RadioGroup>

三、样式代码

  3.1 android:drawableLeft="@drawable/checked_manage"样式

   这种方式使用的是drawableLeft方式,没使用background。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/press_check" android:state_checked="true"></item><item android:drawable="@drawable/nomar_check" ></item>
</selector>

3.1.1 press_check样式svg方式实现

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="10dp"android:height="10dp"android:viewportWidth="1024"android:viewportHeight="1024"><pathandroid:pathData="M511.2,63.9c-246.3,0 -447.8,201.5 -447.8,447.8s201.5,447.8 447.8,447.8C757.5,959.6 959,758 959,511.7S757.5,63.9 511.2,63.9zM868.5,662.1c-19.6,46.2 -47.7,87.7 -83.4,123.4s-77.3,63.8 -123.4,83.4c-47.7,20.3 -98.3,30.6 -150.4,30.6 -52.1,0 -102.7,-10.3 -150.4,-30.6 -46.2,-19.6 -87.7,-47.7 -123.4,-83.4s-63.8,-77.3 -83.4,-123.4c-20.3,-47.7 -30.6,-98.3 -30.6,-150.4 0,-52.1 10.3,-102.7 30.6,-150.4 19.6,-46.2 47.7,-87.7 83.4,-123.4s77.3,-63.8 123.4,-83.4c47.7,-20.3 98.3,-30.6 150.4,-30.6 52.1,0 102.7,10.3 150.4,30.6 46.2,19.6 87.7,47.7 123.4,83.4s63.8,77.3 83.4,123.4C888.7,409 899,459.6 899,511.7c0,52.1 -10.3,102.7 -30.5,150.4z"android:fillColor="#2775DE"/><pathandroid:pathData="M511.2,511.7m-170,0a170,170 0,1 0,340 0,170 170,0 1,0 -340,0Z"android:fillColor="#2775DE"/>
</vector>

 3.1.2 nomar_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="10dp"android:height="10dp"android:viewportWidth="1024"android:viewportHeight="1024"><pathandroid:pathData="M512,182.9c-181.8,0 -329.1,147.4 -329.1,329.1 0,181.8 147.4,329.1 329.1,329.1 181.8,0 329.1,-147.4 329.1,-329.1C841.1,330.2 693.8,182.9 512,182.9zM512,786.3c-151.5,0 -274.3,-122.8 -274.3,-274.3 0,-151.5 122.8,-274.3 274.3,-274.3s274.3,122.8 274.3,274.3C786.3,663.5 663.5,786.3 512,786.3z"android:fillColor="#ffffff"/>
</vector>

3.2 checked_manage样式

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/press_check" android:state_checked="true"></item><item android:drawable="@drawable/nomar_check" ></item>
</selector>

3.2.1 press_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="10dp"android:height="10dp"android:viewportWidth="1024"android:viewportHeight="1024"><pathandroid:pathData="M511.2,63.9c-246.3,0 -447.8,201.5 -447.8,447.8s201.5,447.8 447.8,447.8C757.5,959.6 959,758 959,511.7S757.5,63.9 511.2,63.9zM868.5,662.1c-19.6,46.2 -47.7,87.7 -83.4,123.4s-77.3,63.8 -123.4,83.4c-47.7,20.3 -98.3,30.6 -150.4,30.6 -52.1,0 -102.7,-10.3 -150.4,-30.6 -46.2,-19.6 -87.7,-47.7 -123.4,-83.4s-63.8,-77.3 -83.4,-123.4c-20.3,-47.7 -30.6,-98.3 -30.6,-150.4 0,-52.1 10.3,-102.7 30.6,-150.4 19.6,-46.2 47.7,-87.7 83.4,-123.4s77.3,-63.8 123.4,-83.4c47.7,-20.3 98.3,-30.6 150.4,-30.6 52.1,0 102.7,10.3 150.4,30.6 46.2,19.6 87.7,47.7 123.4,83.4s63.8,77.3 83.4,123.4C888.7,409 899,459.6 899,511.7c0,52.1 -10.3,102.7 -30.5,150.4z"android:fillColor="#2775DE"/><pathandroid:pathData="M511.2,511.7m-170,0a170,170 0,1 0,340 0,170 170,0 1,0 -340,0Z"android:fillColor="#2775DE"/>
</vector>

3.2.2 nomar_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="10dp"android:height="10dp"android:viewportWidth="1024"android:viewportHeight="1024"><pathandroid:pathData="M512,182.9c-181.8,0 -329.1,147.4 -329.1,329.1 0,181.8 147.4,329.1 329.1,329.1 181.8,0 329.1,-147.4 329.1,-329.1C841.1,330.2 693.8,182.9 512,182.9zM512,786.3c-151.5,0 -274.3,-122.8 -274.3,-274.3 0,-151.5 122.8,-274.3 274.3,-274.3s274.3,122.8 274.3,274.3C786.3,663.5 663.5,786.3 512,786.3z"android:fillColor="#ffffff"/>
</vector>

3.3 checked_manage样式

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/press_check" android:state_checked="true"></item><item android:drawable="@drawable/nomar_check" ></item>
</selector>

四 java代码

     由于使用了databinding双向绑定,故就不演示findviewbyid,如果没有使用databinding,

//高压、低压、心率选择处理
mDataBinding.rgGender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int checkedId) {switch (checkedId) {case R.id.rb_press_h:Log.d("RadioGroup", "===高压===");break;case R.id.rb_press_l:Log.d("RadioGroup", "===低压===");break;case R.id.rb_press_rate:Log.d("RadioGroup", "===心率===");break;}}
});

五 给予新手的寄语

     对于新手来讲,开发总会遇到各种各样的问题,逐个解决就好,注意沟通协调。

相关文章:

Android原生实现单选

六年前写的一个控件&#xff0c;一直没有时间总结&#xff0c;趁年底不怎么忙&#xff0c;整理一下之前写过的组件。供大家一起参考学习。废话不多说&#xff0c;先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…...

为什么需要对数值类型的特征做归一化?

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法有以下两种&#xff1a; &#xff08;1&#xff09;线性函数归一化&#xff08;Min-Max Scaling&#xff09; 它对原始数据进行线性变换&#xff0c;使结果映射到【0,1】的范围&…...

ARM 点灯

.text .global _start _start: led1设置GPIOE时钟使能 RCC_MP_AHB4ENSETR[4]->1 0X50000A28LDR R0,0X50000A28 指定寄存器地址LDR R1,[R0] 将寄存器数值取出来放在R1中ORR R1,R1,#(0x1<<4) 将第4位设置为1STR R1,[R0] 将修改后的值写回去设置PE10为输出 GPIOE…...

CamSim相机模拟器:极大加速图像处理开发与验证过程

随着图像处理技术的不断发展&#xff0c;相机模拟在图像处理开发和验证中扮演着越来越重要的角色。相机模拟能够模拟真实相机的成像过程&#xff0c;提供高质量的图像输入&#xff0c;使开发人员能够更好地评估和调整图像处理算法。本文将探讨如何通过相机模拟来加速图像处理的…...

Google Ad帐号被封?代理IP和电子邮件可能是原因

海外广告投放工作中&#xff0c;账号是非常重要的环节。与在Facebook上运行广告相比&#xff0c;运行Google Ads在代理选择方面通常没有那么严格&#xff0c;因为 Google 对 IP 使用并不那么严格。但是&#xff0c;这并不意味着您可以不加考虑地使用任何代理IP。在本文中&#…...

EfficientNet

时间&#xff1a;2019 EfficicentNet网络简介 EfficientNet:Rethinking Model Scaling for Convolutional Neural Networkshttps://arxiv.org/abs/1905.11946,这篇论文是Google在2019年发表的文章。 EfficientNet这篇论文&#xff0c;作者同时关于输入分辨率&#xff0c;网络…...

百度每天20%新增代码由AI生成,Comate SaaS服务8000家客户 采纳率超40%

12月28日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果&#xff0c;文心一言最新用户规模破1亿&#xff0c;截…...

产品管理-学习笔记-版本的划分

版本号说明【X.Y.Z_修饰词】 版本号定义原则X表示大版本号&#xff0c;一般当产品出现重大更新、调整、不再向后兼容的情况时我们会在X上加1Y表示功能更新&#xff0c;在产品原有的基础上增加、修改部分功能&#xff0c;且并不影响产品的整体流程或业务Z表示小修改&#xff0c…...

编程笔记 html5cssjs 004 我的第一个页面

编程笔记 html5&css&js 004 我的第一个页面 一、基本结构二、HTML标签三、HTML元素四、HTML属性五、编写第一个网页六、使用VSCODE小结 开始编写网页&#xff0c;并且使用第一个网页成为一个母板&#xff0c;用于完成后续内容的学习。有一个基本要求&#xff0c;显示结…...

为实体服务器配置Ubuntu

简介 我们在使用虚拟机时&#xff0c;直接在网上找到镜像然后下载到本地&#xff0c;在VMware创建实例时将该iso文件作为镜像源然后进行基础配置就可以轻松安装配置好Linux虚拟机。 在为实体服务器安装Linux系统&#xff0c;同样的&#xff0c;我们也需要镜像源&#xff08;即…...

单例模式的双重检查锁定是什么?

单例模式的双重检查锁定是什么&#xff1f; 单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。双重检查锁定&#xff08;Double-Checked Locking&#xff09;是一种在单例模式中使用的性能优化技术。 在传统的单例模式…...

hyper-v ubuntu 3节点 k8s集群搭建

前奏 搭建一主二从的k8s集群&#xff0c;如图所示&#xff0c;准备3台虚拟机。 不会创建的同学&#xff0c;可以看我上上篇博客&#xff1a;https://blog.csdn.net/dawnto/article/details/135086252 和上篇博客&#xff1a;https://blog.csdn.net/dawnto/article/details/135…...

postman进阶使用

前言 对于postman的基础其实很容易上手实现&#xff0c;也有很多教程。 对于小编我来说&#xff0c;也基本可以实现开发任务。 但是今年我们的高级测试&#xff0c;搞了一下postman&#xff0c;省去很多工作&#xff0c;让我感觉很有必要学一下 这篇文章是在 高级测试工程师ht…...

errors包返回堆栈信息的性能测试

errors包返回堆栈信息的性能测试 上一篇Golang中使用errors返回调用堆栈信息 讲了使用第三方开源库的errors github.com/go-errors/errors&#xff0c;错误信息带调用栈&#xff0c;方便定位错误的抛出位置。 通过堆栈的信息来定位是方便了&#xff0c;性能怎么样&#xff0c…...

力扣热题100道-哈希篇

哈希 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…...

YOLOv7+Pose姿态估计+tensort部署加速

YOLOv7是一种基于深度学习的目标检测算法&#xff0c;它能够在图像中准确识别出不同目标的位置和分类。而姿态估计pose和tensort则是一种用于实现人体姿态估计的算法&#xff0c;可以对人体的关节位置和方向进行精准的检测和跟踪。 下面我将分点阐述YOLOv7姿态估计posetensort…...

gitee+picgo+typora图床搭建

giteepicgotypora图床搭建 1.安装typora 官网下载直接安装&#xff1a;https://www.typora.io/#download 2.编辑typora图像设置 打开 文件 -> 偏好设置 -> 图像设置 插入图片时 选择 上传图片设置 上传服务 为 PicGo-Core(command line) 3.为typora安装PicGo-Core 点…...

Flink项目实战篇 基于Flink的城市交通监控平台(上)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;上&#xff09; Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;下&#xff09; 文章目录 系列文章目录1. 项目整体介绍1.1 项目架构1.2 项目数据流1.3 项目主要模块 2. 项目数据字典2.1 卡口…...

thinkcmf 文件包含 x1.6.0-x2.2.3 已亲自复现

thinkcmf 文件包含 x1.6.0-x2.2.3 CVE-2019-16278 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 ThinkCMF是一款基于PHPMYSQL开发的中文内容管理框架&#xff0c;底层采用ThinkPHP3.2.3构建。ThinkCMF提出灵活的应用机制&a…...

本地部署 text-generation-webui

本地部署 text-generation-webui 0. 背景1. text-generation-webui 介绍2. 克隆代码3. 创建虚拟环境4. 安装 pytorch5. 安装 CUDA 运行时库6. 安装依赖库7. 启动 Web UI8. 访问 Web UI9. OpenAI 兼容 API 0. 背景 一直喜欢用 FastChat 本地部署大语言模型&#xff0c;今天试一…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

在ubuntu等linux系统上申请https证书

使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具&#xff0c;支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上&#xff1a; sudo apt update sudo apt install certbot申请证书 纯手动方式&#xff08;不自动配置&#xff09;&…...

vue3 手动封装城市三级联动

要做的功能 示意图是这样的&#xff0c;因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...