Android终极大招之全面取代drawble文件实现View圆角背景样式的新方案

news2025/2/22 11:15:20

简介

最近一直忙于音视频SDK的开发,遇到很多问题,简单来说,就是怎么让别人接入SDK时越简单越好。相信大多数Android开发都会遇到一个场景,给TextView或Button添加背景颜色,修改圆角,描边等需求。一看到这样的实现效果,自然就是创建drawble文件,设置相关属性shap,color,radius等。然后将drawble文件设置给对应的view即可实现想要的效果。但是作为一个SDK,如果不同的app都需要修改自己独特的颜色,圆角等需求,如何以最小的改动来满足不同app的需求呢?

效果

本文介绍一种使用代码的形式来替代drawble文件实现view的背景色,圆角等效果。话不多说,先看效果。

代码实现

代码实现这些效果主要用到 ShapeDrawable,GradientDrawable,以及 Shape 的实现类。下面介绍常用的6种效果:

  1. 圆形

//实心圆
val drawable = ShapeDrawable(OvalShape())
drawable.paint.color = Color.RED
mBinding.tvOval.background = drawable
  1. 左上角部分圆角矩形

 //上半边圆角矩形
        val externalRound = floatArrayOf(10f,10f,0f,0f,0f,0f,0f,0f)
        val shapeDrawable = ShapeDrawable(RoundRectShape(externalRound, RectF(0f,0f,0f,0f), floatArrayOf(0f,0f,0f,0f,0f,0f,0f,0f)))
        shapeDrawable.paint.color = Color.BLUE
        mBinding.tvOval2.background = shapeDrawable
  1. 带描边的圆角空心矩形

        val roundIn = dp2px(this, 30)
        val externalRounds = floatArrayOf(roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn)
        val outlineRound = floatArrayOf(roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn, roundIn)
        val rectF = RectF(dp2px(this, 2), dp2px(this, 2), dp2px(this, 2), dp2px(this, 2))
        val drawable1 = ShapeDrawable(RoundRectShape(externalRounds, rectF, outlineRound))
        drawable1.paint.color = Color.RED
        mBinding.tvOval3.background = drawable1
  1. 带描边的矩形

 val gradientDrawable = GradientDrawable()
        gradientDrawable.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable.setColor(Color.YELLOW)
        gradientDrawable.shape = GradientDrawable.RECTANGLE
        mBinding.tvOval4.background = gradientDrawable
  1. 带描边圆角的矩形

        val gradientDrawable1 = GradientDrawable()
        gradientDrawable1.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable1.setColor(Color.BLUE)
        gradientDrawable1.shape = GradientDrawable.RECTANGLE
        gradientDrawable1.cornerRadius = roundIn
        mBinding.tvOval5.background = gradientDrawable1
  1. 带描边的圆形

        val gradientDrawable2 = GradientDrawable()
        gradientDrawable2.setStroke(dp2px(this, 2).toInt(), Color.RED)
        gradientDrawable2.setColor(Color.GREEN)
        gradientDrawable2.shape = GradientDrawable.OVAL
        mBinding.tvOval6.background = gradientDrawable2

以上是实现的6种效果,基本上drawble能实现的效果,通过代码也可以达到同样的效果。更多效果需要读者自己动手实现。

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

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

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

相关文章

纯干货,怎样用手机提取歌曲伴奏?

提取歌曲伴奏这个需求还是很大的,要想去掉原声只留伴奏,只要使用音分轨人声分离软件中的【音频提取伴奏】功能就能解决这个问题了,下面就给大家具体演示一下操作步骤! 第一步:打开【音分轨】APP,进入首页点…

电脑提示Explorer.exe系统错误该怎么办?

平时我们在使用电脑时,系统有时会提示Explorer.exe系统错误,很多用户在遇到这类问题时不知道该怎么办。遇到Explorer.exe系统错误,该怎么办呢?下面我们一起来了解一下。 怎么修复Explorer.exe系统错误? Explorer.exe是…

考研:数学二做题套路

文章中的□,代表广义化,就是什么都可以往里面填(但是每个公式中,□的值必须相同,假设一个公式中有两个□,不可以第一个填x第二个填y) 每个类型,都会先总结公式和套路,然…

C++: 多态

1.多态的概念 1.1概念 多态: 是面向对象编程 中的一个重要概念,它允许不同的对象以一种统一的方式进行操作。 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态 多态性使得可以使用相同的接口来处理不同的数据类型,而无需…

【wxWidgets 实现Window窗口系统】

【wxWidgets 实现Window窗口系统】 简介效果 简介 wxWidgets 嗯 还不错,速度快,文档资源全面,轻巧,免费等等,好处一堆但是,窗口透明效果不咋地,不知道是我显卡问题还是啥设置透明全成黑色了,想折腾成JavaFx那样的界面,瞬间没感觉了,不管怎么折腾都达不到预期效果,但是可以实现…

数据库数据恢复-oracle数据库报错:数据库无法打开的数据恢复案例

oracle数据库数据恢复环境: 一台服务器,底层由12块硬盘组成一组磁盘阵列,上层操作系统上运行oracle数据库。 oracle数据库故障: 数据库无法打开,报错:“数据库无法打开”,管理员第一时间将服务器…

英国音乐技术公司【Audoo】完成500万美元融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于英国伦敦的音乐技术公司【Audoo】今日宣布已完成500万美元融资。 本轮融资完成后Audoo的总融资金额已达到2200万美元,本轮融资的投资者包括:Elton John&#xff0c…

【计算机毕设选题推荐】物流管理系统SpringBoot+Vue

前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 项目名 基于SpringBoot的物流管理系统 技术栈 SpringBootVueMySQLMaven 文章目录 一、物流管理系统…

电压放大器在超声领域中有哪些应用场景

电压放大器在超声领域中有多种应用场景。超声技术已经成为医学、工业检测和无损检测等领域中常用的非侵入性检测工具。电压放大器在超声设备中扮演着关键的角色,下面安泰电子将详细介绍电压放大器在超声领域中的应用场景。 超声发生器 超声发生器是产生高频声波的设…

相关性网络图

教程链接: 相关性网络图 往期文章: 1. 复现SCI文章系列专栏 2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。 3. 最全WGCNA教程(替换数据即可出全部结果与图形) WGCNA分析 | 全流程分析代码 | 代码一 WGCNA分…

深入解剖线程池(ThreadPoolExecutor)

目录 1 线程池(ThreadPoolExecutor)2 线程池的使用(Executors)2.1 newFixedThreadPool2.2 newCachedThreadPool2.3 newSingleThreadExecutor2.4 newScheduledThreadPool 多线程应用程序中,线程的创建和销毁开销相对较高…

新手选MT4老手选MT5,有道理吗?anzo capital昂首资本这样分析

最近anzo capital昂首资本一直在分享MT4和MT5的常识,发现真的评论区惊现大神,竟直接作出总结:新手选MT4老手选MT5。不管正确与否,但是这些真的很炸裂啊! 首先在指标和分析对象上,MT4有30个内置指标和33个分…

霸榜SPC-1,成立才3年多,这家中国的存储初创公司凭什么?

史书云:分久必合,合久必分。 高端存储“软硬件解耦”大势所趋。 【全球存储观察 | 热点关注】 提及SPC-1,在存储行业,可谓无人不知,无人不晓。 然而,对于一家成立于2020年1月19日&#xff0c…

2023年09月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 Python编程(1~6级)全部真题・点这里 第1题:日期输出 给定两个整数,表示一个日期的月和日。请按照"MM-DD"的格式输出日期,即如果月和日不到2位时&…

Arduino是如何实现打开串口时,程序复位的?

引言 使用过Arduino的都应该发现过,在打开Arduino IDE自带的COM串口助手的时候,Arduino开发板会复位。在打开其他串口助手的时候也会。这是为什么呢? 原因分析 首先看看arduino的原理图: 我们可以看看与复位引脚相关的部…

【EI会议征稿】第四届材料化学与复合材料国际学术会议(MCCM 2023)

第四届材料化学与复合材料国际学术会议(MCCM 2023) 2023 4th International Conference on Material Chemistry and Composite Materials (MCCM 2023) 第四届材料化学与复合材料国际学术会议(MCCM 2023)将于2023年12月22-24日…

shiro550复现环境搭建

前言 Shiro反序列化漏洞指的是Apache Shiro安全框架中的一个潜在漏洞,该漏洞可能导致攻击者能够通过精心构造的恶意序列化对象来执行任意代码或进行拒绝服务(DoS)攻击。 这种漏洞的根源是在Shiro的RememberMe功能中,当用户选择“…

一个简单算法解决集群定时任务重复执行

好久不见,今天给大家分享一个非常好用的方法,来解决集群定时任务如何避免重复执行的问题。 需求描述: 大家都知道,定时任务在我们实际项目当中是会经常被使用到的,在生产环境中,为了保证服务的高可用&…

做一个物联网的后台程序与数据库设计

数据库部分 先设计一个简单的数据库。表结构如下: sql语句如下: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for realtimedata -- ---------------------------- DROP TABLE IF EXISTS `realtimedata`

【pycharm】sqlite3:Driver class ‘org.sqlite.JDBC‘ not found

pycharm 连接sqlite3的时候,点击:Test Connection 提示:Driver class ‘org.sqlite.JDBC’ not found. 点击:Download missing driver files 点击:Test Connection 这样就ok了;