Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Color颜色值的转换,字符串转int。获取RGBA值-了解Color的几种转换和取值

Android Color颜色值的转换,字符串转int。获取RGBA值-了解Color的几种转换和取值

作者头像
zinyan.com
发布于 2023-07-13 07:15:52
发布于 2023-07-13 07:15:52
3.4K00
代码可运行
举报
文章被收录于专栏:zinyanzinyan
运行总次数:0
代码可运行

介绍

Android 开发中,我们很多时候都是通过color.xml管理颜色即可。但是在业务处理过程中。我们也往往会需要针对颜色值进行各种序列化处理。

下面主要介绍如何将#000000格式的颜色值转成int。并且从里面分别提取R,G,B,A 等值。

下面让我们进入主题吧。

1.res资源中color.xml 中的颜色值获取

主要介绍两种获取方式,一种是我们可以直接得到R元素对象,并获取color。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int blue = ContextCompat.getColor(this,R.color.actionsheet_blue);

我们得到的将是一个int 值的颜色。

请注意,color的颜色值的rgb拼接顺序并不是所有系统统一的。例如有些系统中针对透明值是放在了#号后面,而有些是放在了字符串末尾。

上面的取值方式有一个前提条件。那么就是color.xml中必须有actionsheet_blue而如果没有的话就会崩溃了。

那么有没有检测的方法呢?当然有了。下面的例子就是了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int blue =getResources().getIdentifier("actionsheet_blue", "color", context.getPackageName());

我们通过id 字段值去检测是否有color类型的该属性值。有的话blue就是有值,而如果没有的话blue=0

这种方案可以避免掉color.xml没有颜色值定义时出现的崩溃现象。

(第二种方法,更多的使用在SDK开发上)

2.在java代码中定义color值

经常见到在代码中定义color的情况: String color1= "#CE042C"。这种写法也可以,就是使用的过程中还会面临颜色转换的逻辑,效率太低。而且String 相较于int 占用的内存空间明显要大。

所以,建议在定义color的时候,直接写成:int color1 =0xCE042C

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int color1 = 0xfe042c;
public String color2="#fe042c";

这两个的颜色表达的都是一样的。我们要学会合理的使用。

3. #000000 字符串颜色转换int值

我们经常碰见后台接口传递或者其他数据来源,给与我们的就是#号开头的一串颜色值。而计算显示的时候我们需要的int值。

那么转换我们可以使用Color自带api实现。示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int zinyanColor = Color.parseColor("#CE042C");

系统使用的也是int值。这也是我建议大家本地如果需要写颜色值的时候,尽量选择int而不是String格式的原因了。

4. color转成 R,G,B,A 十进制值

我们如果需要将color的值转成 R,G,B,A 转成 0~255,范围的整数值,在Android 中可以很简单的实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int zinyanColor=0xCE042C;
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(Color.alpha(zinyanColor) + ",");
stringBuffer.append(Color.red(zinyanColor) + ",");
stringBuffer.append(Color.green(zinyanColor) + ",");
stringBuffer.append(Color.blue(zinyanColor) + ",");
Log.e("XXXXXXXX", stringBuffer.toString());
//输出结果是
0206,4,44,

上面的示例就是直接提前颜色值的0-255范围结果了。

如果你的Color版本太低了。没有上面的api 的话。你需要自己进行位移计算了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int zinyanColor=0xCE042C;
int r = ((zinyanColor >> 16) & 0xff);
int g = ((zinyanColor >> 8) & 0xff);
int b = ((zinyanColor) & 0xff);
int a = ((zinyanColor >> 24) & 0xff);
//输出结果是
0206,4,44,

上面的位移计算 16,8,24等。是怎么来的呢?

那是因为:0xce042c 的组合顺序是:ARGB 格式。也就是说2c代表了B,04代表了G,ce点了R,而我们这个颜色值没有A的值。如果有的话那就是0xFFce042c 。ff就是A了。

然后每个颜色范围8位。从右往左获取并计算。

也就是B 从0到7,G从8-15,R从16到23,然后A就是24之后了。

由于Android的颜色值顺序是:ARGB。所以上面的例子是这样进行位移的。但是还设有RGBA等情况。那么就要灵活调整位移了。明白原理和过程后,我们也可以自己随意进行调整

5. 获取Color 的R,G,B,A 十六进制值

我们在上面学习了String Color 转int Color。那么我们这一次就学习如何将int Color 转String Color。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	int zinyanColor=0xCE042C;
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("#");
        stringBuffer.append(Integer.toHexString(Color.red(zinyanColor)));
        stringBuffer.append(Integer.toHexString(Color.green(zinyanColor)));
        stringBuffer.append(Integer.toHexString(Color.blue(zinyanColor)));
        Log.e("XXXXXXXX",stringBuffer.toString());
//输出结果是
##ce42c

这种的转换比较简单。但是默认转换为int整数了,我们如果要转成16进制也就是Hex转换即可。

了解这几种转换,大家针对颜色的使用就能直观很多了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 zinyan 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战119: 杨辉三角 II
https://leetcode-cn.com/problems/pascals-triangle-ii/
程序员小猿
2021/01/19
2060
​LeetCode刷题实战119: 杨辉三角 II
知识改变命运 数据结构【杨辉三角(顺序表)】
我们大概分析下题目根据画图可知,我们可以把每一行的元素进行存储,然后再把每一行存储起来,然后就实现了题目 代码:
用户11319080
2024/10/17
660
知识改变命运 数据结构【杨辉三角(顺序表)】
日拱一卒,月进一步(6)(杨辉三角2)
用户11039545
2024/05/04
740
​ LeetCode 118:杨辉三角 II Pascal's Triangle II
Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle.
爱写bug
2019/07/07
3620
LeetCode-119. 杨辉三角II(java)
       这题我一开始拿到以为是直角形状的杨辉三角,其实不然,这题在我上题所解的非常类似​​《LeetCode118.杨辉三角》​​​。无非此题就是在上期的基础上,按要求返回指定行的数据进行返回。其实思路也很简单,你既然能按照指定的行数输出数据,那你也可以指定输出某一行的数据,对吧,你只需要最后在结果集上 ​​return list.get(rowIndex)​​即可。
bug菌
2023/05/27
1980
LeetCode-119. 杨辉三角II(java)
【Leetcode-118. 杨辉三角 -119. 杨辉三角Ⅱ】
题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
YoungMLet
2024/03/01
1250
《LeetCode-数组篇一》之杨辉三角与重塑矩阵
前言 本专栏是LeetCode刷题笔记,记录一下自己的做题轨迹,更好的让自己复习这些令人头痛的题目。博主是一个新手,做题水平非常有限,如有错敬请指出,如有对于题目有更优的解法也可以分享给博主,路漫漫其修远兮,算法之路慢慢而求索。
用户10517932
2023/10/07
1720
《LeetCode-数组篇一》之杨辉三角与重塑矩阵
三分钟看完两道套数学公式的算法题
题目来源于 LeetCode 上第 118 号问题:杨辉三角。题目难度为 Easy,目前通过率为 61.8% 。
五分钟学算法
2019/05/15
6430
三分钟看完两道套数学公式的算法题
118 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
木瓜煲鸡脚
2021/11/30
3780
118 杨辉三角
【Java题解】杨辉三角—力扣
List<List<Integer>>是一个嵌套列表,列表里面存放的也是列表,且存放的列表里面存放的是Integer类型的对象。这类似与一个二维数组。
用户11162265
2024/08/05
920
【Java题解】杨辉三角—力扣
【C++经典例题】杨辉三角问题
“杨辉三角” 问题是一道经典的算法题目,它不仅考验对数组操作的熟练程度,还需要深入理解杨辉三角的数学特性。
倔强的石头_
2025/04/27
1630
【C++经典例题】杨辉三角问题
【杨辉三角】ArrayList和普通二维数组实现
前言: 小编这里有两种方法实现,但是其中一种是要有泛型,以及ArrayList和List有所了解的uu哦
用户11288949
2024/09/24
670
【杨辉三角】ArrayList和普通二维数组实现
日拱算法:解两道“杨辉三角”题
思路简单,把握杨辉三角特点:第0行1个元素,第1行2个元素,第2行3个元素;依此例推
掘金安东尼
2022/09/19
1900
日拱算法:解两道“杨辉三角”题
【每日一题】4.LeetCode——杨辉三角
杨辉三角的第0行只有一个数:1。对于 1 ≤ i < numRows。用pervRow表示杨辉三角的第 i - 1行,用curRow表示杨辉三角的第 i 行.
爱敲代码的小杨.
2024/05/07
1270
【每日一题】4.LeetCode——杨辉三角
LeetCode每日一练(杨辉三角)
题目要求的是给定一个非负索引k,要求得到杨辉三角中的第k行,杨辉三角相信大家都不陌生了吧,不明白的同学去百度一下补补课呦。
wangweijun
2022/01/10
5810
LeetCode每日一练(杨辉三角)
leetcode ​# 118:Pascal's Triangle 杨辉三角
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
爱写bug
2019/06/25
3700
leetcode ​# 118:Pascal's Triangle 杨辉三角
Leetcode#118. Pascal's Triangle(杨辉三角)
题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,
武培轩
2018/09/28
5800
Leetcode#118. Pascal's Triangle(杨辉三角)
☆打卡算法☆LeetCode 119. 杨辉三角 II 算法解析
“给定一个非负索引 rowIndex ,返回 杨辉三角的第 rowIndex 行。”
恬静的小魔龙
2022/08/07
2040
☆打卡算法☆LeetCode 119. 杨辉三角 II 算法解析
leetcode188.杨辉三角[easy](python)
首先,由于杨辉三角最外层的两边都是1,且杨辉三角的计算需要根据这两边计算,所以我直接初始化一个二维数组,第一维表示有几行,第二维度表示每行有几个元素,初始化值为1,然后我们观察发现,假设参与运算的节点坐标为i,j,则新的杨辉三角的值为arr[i+1][j] = arr[i][j-1] + arr[i][j]。
从不摸鱼的van
2023/10/19
2170
【小Y学算法】⚡️每日LeetCode打卡⚡️——33.杨辉三角
根据题目中给出的图形示例,我们需要定义一个 jagged(锯齿)数组,它的长度与 numRows 一样。
呆呆敲代码的小Y
2021/09/23
2520
【小Y学算法】⚡️每日LeetCode打卡⚡️——33.杨辉三角
相关推荐
​LeetCode刷题实战119: 杨辉三角 II
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验