Android Color 判断色值小结
小菜我最近在处理主题色方面的问题,有个小需求是处理更改颜色,判断色值等,稍稍整理了一下。
Color 大家都很熟悉,其组成方式是 RGB 红绿蓝三原色,小菜觉得可以按 ARGB 即 Alpha 透明度、Red 红色、Green 绿 和 Blue 蓝色来记。默认的 Alpha 为 FF/255 完全不透明,可不设置;若 Alpha 为 00/0 时,代表完全透明,则红绿蓝不起作用;而介于 00-FF/0-255 之间时,可以显示出颜色不同的层次效果。
小菜的测试步骤如下:
- 在 color.xml 中定义几个测试颜色值;
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="test_color1">#3F51B5</color> <color name="test_color2">#3F51B5</color> <color name="test_color3">#FF4081</color> <color name="test_color4">#40FF4081</color> </resources>
- 小菜想是否可以直接用 R.color.XX 方式判断色值,测试不相同,小菜理解获取的是 R 的值;
// 日志输出 Log.e("color1==" + R.color.test_color1, "color2==" + R.color.test_color2); // 结果 color1==2131427410: color2==2131427411
- 小菜测试用 getResources().getColor(R.color.XX) 方式,结果是对的;
// 日志输出 Log.e("test_color1==" + getResources().getColor(R.color.test_color1), "test_color2==" + getResources().getColor(R.color.test_color2)); // 结果 test_color1==-12627531: test_color2==-12627531
- 继续测试,获取某个控件背景色;
// 日志输出 if (mColorTv1.getBackground() instanceof ColorDrawable) { ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground(); int color = colordDrawable.getColor(); Log.e("color1==" + color, "test_color3==" + getResources().getColor(R.color.test_color3)); } // 结果 color==-49023: test_color3==-49023
- 获取方式都是可以的,只是这种方式看起来并不直接,转成 16 进制看起来会更自然;
String Color_16(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("#"); stringBuffer.append(Integer.toHexString(Color.alpha(color))); stringBuffer.append(Integer.toHexString(Color.red(color))); stringBuffer.append(Integer.toHexString(Color.green(color))); stringBuffer.append(Integer.toHexString(Color.blue(color))); return stringBuffer.toString(); } String Color_16_NoAlpha(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("#"); stringBuffer.append(Integer.toHexString(Color.red(color))); stringBuffer.append(Integer.toHexString(Color.green(color))); stringBuffer.append(Integer.toHexString(Color.blue(color))); return stringBuffer.toString(); }
// 日志输出 if (mColorTv1.getBackground() instanceof ColorDrawable) { ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground(); int color = colordDrawable.getColor(); Log.e("color==" + Color_16(color), "test_color3==" + Color_16(getResources().getColor(R.color.test_color3))); } // 结果 color==#FF4081: test_color3==#FF4081
以下是测试完整代码:
public class ColorActivity extends AppCompatActivity { Toolbar mToolbar; TextView mTitleTv, mColorTv1, mColorTv6; StringBuffer strBuffer = new StringBuffer(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_color); mToolbar = (Toolbar) this.findViewById(R.id.toolbar); mTitleTv = (TextView) this.findViewById(R.id.tv_toolbar_title); mTitleTv.setText("Color 色值判断"); mColorTv1 = (TextView) this.findViewById(R.id.color_tv1); mColorTv6 = (TextView) this.findViewById(R.id.color_tv6); strBuffer.append("R.color.test_color1 方式 " + R.color.test_color1 + "\n" + "R.color.test_color2 方式 " + R.color.test_color2 + "\n"); strBuffer.append("getResources().getColor(R.color.test_color1) 方式 " + getResources().getColor(R.color.test_color1) + "\n" + "getResources().getColor(R.color.test_color2) 方式 " + getResources().getColor(R.color.test_color2) + "\n" + "getResources().getColor(R.color.test_color3) 方式 " + getResources().getColor(R.color.test_color3) + "\n"); if (mToolbar.getBackground() instanceof ColorDrawable) { ColorDrawable colordDrawable = (ColorDrawable) mToolbar.getBackground(); int color = colordDrawable.getColor(); Log.e("=======color1==" + color, "=======color2==" + getResources().getColor(R.color.test_color3)); } if (mColorTv1.getBackground() instanceof ColorDrawable) { ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground(); int color = colordDrawable.getColor(); strBuffer.append("ColorTv " + color + "\n"); strBuffer.append("ColorTv 十六进制 " + Color_16(color) + "\n"); strBuffer.append("ColorTv 十六进制(无透明度) " + Color_16_NoAlpha(color) + "\n"); strBuffer.append("ColorTv 透明度 " + Color_Alpha(color) + " 红 " + Color_Red(color) + " 绿 " + Color_Green(color) + " 蓝 " + Color_Blue(color) + "\n"); } strBuffer.append("R.color.test_color3 十六进制 " + Color_16(getResources().getColor(R.color.test_color3)) + "\n"); strBuffer.append("R.color.test_color3 十六进制(无透明度) " + Color_16_NoAlpha(getResources().getColor(R.color.test_color3)) + "\n"); strBuffer.append("R.color.test_color3 透明度 " + Color_Alpha(getResources().getColor(R.color.test_color3)) + " 红 " + Color_Red(getResources().getColor(R.color.test_color3)) + " 绿 " + Color_Green(getResources().getColor(R.color.test_color3)) + " 蓝 " + Color_Blue(getResources().getColor(R.color.test_color3)) + "\n"); strBuffer.append("R.color.test_color4 十六进制 " + Color_16(getResources().getColor(R.color.test_color4)) + "\n"); strBuffer.append("R.color.test_color4 十六进制(无透明度) " + Color_16_NoAlpha(getResources().getColor(R.color.test_color4)) + "\n"); strBuffer.append("R.color.test_color4 透明度 " + Color_Alpha(getResources().getColor(R.color.test_color4)) + " 红 " + Color_Red(getResources().getColor(R.color.test_color4)) + " 绿 " + Color_Green(getResources().getColor(R.color.test_color4)) + " 蓝 " + Color_Blue(getResources().getColor(R.color.test_color4)) + "\n"); mColorTv6.setText(strBuffer.toString()); } String Color_16(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("#"); stringBuffer.append(Integer.toHexString(Color.alpha(color))); stringBuffer.append(Integer.toHexString(Color.red(color))); stringBuffer.append(Integer.toHexString(Color.green(color))); stringBuffer.append(Integer.toHexString(Color.blue(color))); return stringBuffer.toString(); } String Color_16_NoAlpha(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("#"); stringBuffer.append(Integer.toHexString(Color.red(color))); stringBuffer.append(Integer.toHexString(Color.green(color))); stringBuffer.append(Integer.toHexString(Color.blue(color))); return stringBuffer.toString(); } String Color_Alpha(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(Integer.toHexString(Color.alpha(color))); return stringBuffer.toString(); } String Color_Red(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(Integer.toHexString(Color.red(color))); return stringBuffer.toString(); } String Color_Green(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(Integer.toHexString(Color.green(color))); return stringBuffer.toString(); } String Color_Blue(int color) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(Integer.toHexString(Color.blue(color))); return stringBuffer.toString(); } public static int Color_ChangeAlpha(int color, int alpha) { int red = Color.red(color); int green = Color.green(color); int blue = Color.blue(color); return Color.argb(alpha, red, green, blue); } }
Tips:获取控件背景色时要注意 backdround 是 color 还是 drawable,可先判断是否是 ColorDrawable。
下面的是小菜的公众号,欢迎闲来吐槽哦~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
苹果计划明年在印度开设iOS应用设计和开发加速器
北京时间5月18日消息,据科技博客AppleInsider报道,和预料的一样,苹果在周二晚间宣布,计划在印度班加罗尔开设一个设计和开发加速器。印度开发者将借助这一项目在苹果软件平台上学习各种各样的编码技术。 苹果称,这是公司首次建立这种类型的加速器。对于想要开发iOS、Mac、AppleTV以及AppleWatch应用的印度开发者,班加罗尔中心将为他们提供专业技术和支持。 “印度是全球最具活力和创业精神的iOS开发社区之一,”苹果CEO蒂姆·库克(TimCook)表示,“随着新设施的开张,我们将为开发者提供工具,帮助他们为全球用户开发创新应用。” 苹果选择班加罗尔是考虑到了它是一个快速发展的科技城市。苹果称,班加罗尔的科技创业公司数量要多于印度任何其他城市,超过100万人从事科技行业,是苹果培养iOS开发者的一片沃土。而且,逾40%的当地大学毕业生的专业是工程或信息技术。 对于即将开设的班加罗尔中心,苹果计划每周安排讲师和专家就多个技术主题进行概述讲解。开发者能够接受一对一的应用评估,并学习Swift编程语言等知识。 苹果印度加速器的功能预计和该公司在意大利那不勒斯建立的欧洲iOS开发...
- 下一篇
android面试题
最近在准备android面试,整理了下相关的面试题,分为如下三个部分:android部分、Java部分、算法面试题,后续有新内容直接在对应的文章中补充。 android部分:本文 Java部分: https://www.jianshu.com/p/c2c8f5019c8f 算法部分: https://www.jianshu.com/p/d9bfc440ada3 0、android系统架构图 android架构(http://gityuan.com/) Android系统启动过程过程如下:Loder--Kernel--Native--FrameWork--App。 Loader层:分为Boot ROM和Boot Loader,其中Boot ROM是当手机处于关机状态时,长按Power键开机,引导芯片开始从固化ROM里的预设代码开始执行,然后加载引导程序到RAM;Boot Loader是启动Android系统之前的引导程序,主要是检查RAM,初始化应急参数等功能。 Kernel层:指的是android内核层,到这里才刚刚开始进入android系统。启动Kernel的Swapper进程,该进...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS8安装Docker,最新的服务器搭配容器使用