若移动端访问不佳,请使用 –> 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() 使用注意事项:

  1. 可能会抛出 IllegalArgumentException 的异常,使用时可以进行一层封装,对异常进行捕获并记录日志,出现异常时返回一个预设的颜色值。
  2. 未做非空判断,可以先判空处理。

扩展: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相关推荐

  1. Android 性能优化必知必会(2020-5-16)

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  2. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  3. 操作系统:手把手带你扫盲 操作系统 的那些必知必会!

    前言 操作系统 应是程序猿需掌握的知识,但往往会被忽略 今天,我将手把手带大家扫盲 操作系统 的那些必知必会!希望你们会喜欢. 目录 1. 跨进程通信方式(IPC) 注:此处给出移动端 Android ...

  4. Java架构师必知必会,带走不谢

    可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地. 成为Java架构师,需要掌握哪些技能呢 ...

  5. c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战

    本文涵盖 前言 高级函数概念 函数作为参数的高阶函数 map filter reduce sort详解与实战 函数作为返回值的高阶函数 isType函数与add求和函数 如何自己创建高阶函数 前言 一 ...

  6. MySQL必知必会教程:深入理解MySQL技术内幕

    2019独角兽企业重金招聘Python工程师标准>>> MySQL必知必会教程:深入理解MySQL技术内幕 作为最流行的开源数据库软件之一,MySQL数据库软件已经是广为人知了.当前 ...

  7. mysql必知必会_《MySQL必知必会》学习小结

    关于SQL,之前通过sqlzoo的题目,完成了入门,也仅仅是入门而已. 最近都在忙着投简历和找新的数据分析项目做(为了练python和面试的时候有的聊),所以SQL放了一段时间没练.目前的工作用不到, ...

  8. php7.2 开启mcy扩展,phper必知必会(二)

    1.说说你对进程,线程以及协程的理解 进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础.进程是程序基本执行的实体.进程与进程之间是独立的,拥有完全独立的地址空间,进程的切换只发生在内 ...

  9. 【web必知必会】—— 图解HTTP(下)

    [web必知必会]-- 图解HTTP(下) 原文:[web必知必会]-- 图解HTTP(下) 上一篇<图解HTTP 上>总结了HTTP的报文格式,发送方式,以及HTTP的一些使用. 本文再 ...

  10. mysql正则表达式关键字_《MySQL必知必会》正则表达式

    <MySQL必知必会>正则表达式 正则表达式 1.1.关键字 REGEXP 正则表达式的使用需要用到关键字 REGEXP . select prod_name from products ...

最新文章

  1. Xamarin Essentials教程构建共享请求
  2. 在nodejs中的集成虹软人脸识别
  3. web安全之XSS基础-常见编码科普
  4. eclipse操作指南
  5. vSphere 7简介:混合云的功能和技术
  6. 插件开发之360 DroidPlugin源码分析(二)Hook机制
  7. 如何学习Java软件开发
  8. 风云崛起之matlab求解电路状态方程
  9. 我是如何创建学校免费上网账号上网的
  10. 报错:for..in loops iterate over the entire prototype chain, which is virtually never what you want.
  11. RR报文解析(三)利用LSR, DLSR计算RTT
  12. 计算机网络安全概述(论文)
  13. mysql string agg_如何从string_agg()中以正确的顺序得到结果
  14. python 连接mssqlserver方法之pymssql
  15. Google Adwords关键词广告须注意的7个问题
  16. Mermaid流程图
  17. [Ubuntu]vim中文乱码
  18. 恢复服务器的文件,云服务器怎么恢复文件
  19. SpringBoot使用SensitiveWord实现敏感词过滤
  20. 【graceup系列】--基于Java带数字签名的邮件收发系统

热门文章

  1. java 恶搞程序_Java恶搞!强制关闭电脑上的程序进程!
  2. 8个宝藏级英语APP 0基础必备
  3. 推荐 | 一个机器学习与深度学习的优质公众号
  4. vue项目创建组件的步骤展示
  5. java中跳转页面的两种方法_页面跳转的几种方式
  6. undertow 怎么创建线程_Springboot使用Undertow
  7. 天龙八部 - 跑商如何计算是否满票
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java药店管理系统1m48u
  9. 淘宝爬虫 TaoBaoCrawler
  10. JS截取字符串常用方法详细整理