Android 判断颜色为深颜色还是浅颜色来动态调整app文字和图标颜色

  • 前言
  • 解决
    • 方案1
    • 方案2
  • 完事

前言

现在,项目中有个需求就是 app 的顶部 title bar 的颜色能根据背景图片动态调整颜色。但是这时候就会有一个问题,那就是 title bar 上面会有一些图标和文字,他们应该变成什么颜色才对呢?
我们可以参考系统状态栏,显示两种颜色,黑色和白色。当背景颜色为深色系的颜色时,就显示白色;当背景颜色为浅色系时,就显示黑色。
但是怎么区分背景颜色是深色系还是浅色系呢?

解决

参考:@tomcatsg – 如何通过RGB值判断颜色深浅

方案1

把 RGB 的值求和,然后取一个值,当和大于等于此值就为浅色。
公式如下:

if ($R + $G + $B >= 450) {// add shadow
}

这个算法很傻很简单,但效果不理想,特别是在 B 较大的时候,估计是眼睛对 RGB 各种颜色的敏感度都不一样。

方案2

把 RGB 模式转换成 YUV 模式,而 Y 是明亮度(灰阶),因此只需要获得 Y 的值而判断他是否足够亮就可以了。
公式如下:

$grayLevel = $R * 0.299 + $G * 0.587 + $B * 0.114;
if ($grayLevel >= 192) {// add shadow
}

代码中使用:

    /*** 显示标题背景颜色* @param colorInt*/public void setTittleColor(int colorInt) {llTittle.setBackgroundColor(colorInt);int gray = (int) (Color.red(colorInt) * 0.299 + Color.green(colorInt) * 0.587 + Color.blue(colorInt) * 0.114);int color;if (gray >= 192) {// 深色系color = mContext.getResources().getColor(R.color.text_normal_color);} else {// 浅色系color = mContext.getResources().getColor(R.color.white_color);}imgBack.setColorFilter(color);imgLast.setColorFilter(color);imgNext.setColorFilter(color);imgRefresh.setColorFilter(color);txtTittle.setTextColor(color);}

完事

Android 判断颜色为深颜色还是浅颜色来动态调整app文字和图标颜色相关推荐

  1. Android 设置状态栏背景颜色和状态栏文字、图标颜色

    纯抄的,记录学习,感谢原文作者 原文:https://www.jianshu.com/p/5a54b2c3ea05 Android 4.4(API 19)之后,就提供了修改状态栏颜色的方法,但是在 A ...

  2. G2调整legend文字的字体颜色

    G2的图表legend文字的字体颜色默认是灰色. 更改方法,该成白色: chart.legend('year', {position: "right",itemName: {sty ...

  3. android状态栏背景色和图标颜色更改总结

    通过若干种方法来实现状态栏背景和图标变色 注意事项:api 23才支持状态栏图标变色,所以图标变色会在编译api>=23中实现 一 Android 4.4 之前状态栏默认黑色,不能改变 二 An ...

  4. android开发 修改标题栏背景_android开发修改状态栏背景色和图标颜色

    修改状态栏背景色和图标颜色 默认是黑底白字的,现在要改为白底黑字的 先看下效果图: Screenshot_2018-01-03-19-20-27-797_com.yiban1314..png 1.状态 ...

  5. R语言ggplot2可视化配置图例(legend)标签色彩的升序或者反序(reverse)实战:ggplot2可视化默认图例标签色彩(升序,颜色越来越深)、可视化配置图例标签颜色反序(颜色越来越浅)

    R语言ggplot2可视化配置图例(legend)标签色彩的升序或者反序(reverse)实战:ggplot2可视化默认图例标签色彩(升序,颜色越来越深).可视化配置图例标签颜色反序(颜色越来越浅) ...

  6. 根据RGB​值判断颜色是否深浅色(附深浅色颜色集合)

    做博客云标签时碰到了这个问题,因为自己的背景是白色的,所以标签的背景色要是深色.网上找到了按照灰度值去判断(CSDN论坛),然后又搜了一下已有的文章. g = R0.299 + G0.587 + B* ...

  7. android arcgis多变形边框颜色,Arcgis for Android 判断指定点是否在多边形内部

    Arcgis for Android 判断指定点是否在指定多边形的内部方法: /** * 判断坐标点是否落在指定的多边形区域内 * @param point 指定的坐标点 * @param list ...

  8. Android设置状态栏字体深色,Android实现修改状态栏背景、字体和图标颜色的方法...

    搜索热词 前言: Android开发,对于状态栏的修改,实在是不友好,没什么api可以用,不像ios那么方便.但是ui又喜欢只搞ios一套.没办法.各种翻源码,写反射.真的蛋疼. 需求场景: 当too ...

  9. android studio app字体大小设置,Android Studio App设置TextView文字内容大小颜色

    设置TextView文字内容大小颜色 1.第一种方法在activity_main.xml李设置,Java文件不用改: android:text="这里是文字" android:te ...

最新文章

  1. 固件模块之间的关系 C语言里面的模块
  2. java中setid(),Java Process.setId方法代碼示例
  3. System.arraycopy 和Arrays.copyOf
  4. 微信门店小程序怎样创建 门店小程序创建方法简介
  5. Java 洛谷 P1150 Peter的烟
  6. Linux中ifcfg-eth0配置参数解释
  7. hao123电脑版主页_百度浏览器停更没关系,hao123才令人唏嘘!
  8. Qt工作笔记-Qt仿大佬使用关键字(Q_DECL_OVERRIDE与override)
  9. java获得map内存_[java]测试static的map的内存
  10. 源码编译Ros, Ubuntu18.04系统使用源码编译Ros1,出错集合及其解决办法
  11. windows XP cmd命令大全
  12. CAN应用层常用协议
  13. 主曲率,主方向,高斯曲率与平均曲率公式与matlab代码
  14. MediaWiki中的各种功能和设置
  15. 艾永亮:永远也说不清作用的保健品凭什么卖了千年?
  16. mysql计算年休假天数_年休假天数计算方法是怎样的
  17. 庆科EMW3080 mxos开发环境搭建helloworld编译
  18. python excel处理 pandas 统计重复数据
  19. 做自己的m3u8点播系统使用HTTP Live Streaming
  20. 待办事项Windows软件推荐

热门文章

  1. Java生成Word文档并压缩导出。
  2. 微信公众号监听后退,关闭内置浏览器
  3. 新闻发布系统类图_强化新闻宣传工作 提高舆论引导能力——攀枝花市应急管理局开展引导业务技能大比武活动...
  4. 项目中遇到哪些难点,如何解决的
  5. liboqs-量子安全密码算法开源C库
  6. UE4 插值FInterpEaseInOut和Ease
  7. outlook 2007数据文件
  8. SpringMvc-maven-Mysql-ajax-bootsrap进行一个简单的web开发(大二下期末考试内容)
  9. 手机APP远程温湿度监控系统(连上公网、阿里云)
  10. java+selenium+chromedrive实现全屏截图