Android 必知必会 - RGBA转ARGB
若移动端访问不佳,请使用 –> Github版
背景
服务端下发的颜色值字符串由于一开始依据 iOS 端的 RGBA 格式,Android 端(Android 使用 ARGB 方式)需要进行兼容,需要对此字符串转换。
举例:RGBA #ABCDEF99
=> ARGB #99ABCDEF
方式
①字符串截取和组合
String argbStr = rgba.substring(0, 1) + rgba.substring(7, 9) + rgba.substring(1, 7);
int argb = Color.parseColor(argbStr);
②转为Char数组,遍历重组
char[] chars = rgba.toCharArray();
StringBuilder tempStr = new StringBuilder();for (int i = 0; i < chars.length; i++) {if (i == 0) {tempStr.append(chars[0]);} else if (i == 1) {tempStr.append(chars[7]);} else if (i == 2) {tempStr.append(chars[8]);} else {tempStr.append(chars[i - 2]);}
}
int argb = Color.parseColor(tempStr.toString());
③位操作
int rgba = Color.parseColor(rgbaStr);
int argb = (rgba >>> 8) | (rgba << (32 - 8));
注意事项:
rgbaStr
字符的长度为 9 的时候,才需要转换,7 位时只有RGB色值,直接使用 Color.parseColor()
即可。
Color.parseColor()
使用注意事项:
- 可能会抛出
IllegalArgumentException
的异常,使用时可以进行一层封装,对异常进行捕获并记录日志,出现异常时返回一个预设的颜色值。 - 未做非空判断,可以先判空处理。
扩展:ARGB 转 RGBA
以下算法临时改写而成,未经实际产品应用,建议先跑一些测试用例进行验证。
// 1. 字符串截取+拼接
String argbTemp= argbStr.substring(0, 1) + argbStr.substring(3, 9) + argbStr.substring(1, 3);
int rgba = Color.parseColor(argbTemp);// 2. 转为Char数组,遍历重组
char[] chars = argbStr.toCharArray();StringBuilder tempStr = new StringBuilder();for (int i = 0; i < chars.length; i++) {if (i == 0) {tempStr.append(chars[0]);} else if (i == 7) {tempStr.append(chars[1]);} else if (i == 8) {tempStr.append(chars[2]);} else {tempStr.append(chars[i + 2]);}}int rgba = Color.parseColor(tempStr.toString());
// 3. 位操作
int argb = Color.parseColor(argbStr);
int rgba = (argb << 8) | (argb >>> (32-8));
如果有什么建议或者问题可以随时联系我,共同探讨学习:
- Github: likfe
- CSDN:他叫自己Mr.张
- 掘金:cafeting
- 微博:cafeting
Android 必知必会 - RGBA转ARGB相关推荐
- Android 性能优化必知必会(2020-5-16)
做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- 操作系统:手把手带你扫盲 操作系统 的那些必知必会!
前言 操作系统 应是程序猿需掌握的知识,但往往会被忽略 今天,我将手把手带大家扫盲 操作系统 的那些必知必会!希望你们会喜欢. 目录 1. 跨进程通信方式(IPC) 注:此处给出移动端 Android ...
- Java架构师必知必会,带走不谢
可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地. 成为Java架构师,需要掌握哪些技能呢 ...
- c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
本文涵盖 前言 高级函数概念 函数作为参数的高阶函数 map filter reduce sort详解与实战 函数作为返回值的高阶函数 isType函数与add求和函数 如何自己创建高阶函数 前言 一 ...
- MySQL必知必会教程:深入理解MySQL技术内幕
2019独角兽企业重金招聘Python工程师标准>>> MySQL必知必会教程:深入理解MySQL技术内幕 作为最流行的开源数据库软件之一,MySQL数据库软件已经是广为人知了.当前 ...
- mysql必知必会_《MySQL必知必会》学习小结
关于SQL,之前通过sqlzoo的题目,完成了入门,也仅仅是入门而已. 最近都在忙着投简历和找新的数据分析项目做(为了练python和面试的时候有的聊),所以SQL放了一段时间没练.目前的工作用不到, ...
- php7.2 开启mcy扩展,phper必知必会(二)
1.说说你对进程,线程以及协程的理解 进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础.进程是程序基本执行的实体.进程与进程之间是独立的,拥有完全独立的地址空间,进程的切换只发生在内 ...
- 【web必知必会】—— 图解HTTP(下)
[web必知必会]-- 图解HTTP(下) 原文:[web必知必会]-- 图解HTTP(下) 上一篇<图解HTTP 上>总结了HTTP的报文格式,发送方式,以及HTTP的一些使用. 本文再 ...
- mysql正则表达式关键字_《MySQL必知必会》正则表达式
<MySQL必知必会>正则表达式 正则表达式 1.1.关键字 REGEXP 正则表达式的使用需要用到关键字 REGEXP . select prod_name from products ...
最新文章
- Xamarin Essentials教程构建共享请求
- 在nodejs中的集成虹软人脸识别
- web安全之XSS基础-常见编码科普
- eclipse操作指南
- vSphere 7简介:混合云的功能和技术
- 插件开发之360 DroidPlugin源码分析(二)Hook机制
- 如何学习Java软件开发
- 风云崛起之matlab求解电路状态方程
- 我是如何创建学校免费上网账号上网的
- 报错:for..in loops iterate over the entire prototype chain, which is virtually never what you want.
- RR报文解析(三)利用LSR, DLSR计算RTT
- 计算机网络安全概述(论文)
- mysql string agg_如何从string_agg()中以正确的顺序得到结果
- python 连接mssqlserver方法之pymssql
- Google Adwords关键词广告须注意的7个问题
- Mermaid流程图
- [Ubuntu]vim中文乱码
- 恢复服务器的文件,云服务器怎么恢复文件
- SpringBoot使用SensitiveWord实现敏感词过滤
- 【graceup系列】--基于Java带数字签名的邮件收发系统