【Android】动态获取当前背景图,根据背景图色动态改变字体颜色 您所在的位置:网站首页 卡西欧手表logo图片颜色深色 【Android】动态获取当前背景图,根据背景图色动态改变字体颜色

【Android】动态获取当前背景图,根据背景图色动态改变字体颜色

2023-10-13 04:21| 来源: 网络整理| 查看: 265

情况描述:市面上很多的App,在展示头部的时候会采用用户传输的图片进行高斯模糊处理,然后设置成背景,这上面再展示其他的信息,例如,姓名,签名,编辑之类的操作按钮。 问题:但是字体颜色你是设置为白色,还是黑色呢?我设置一个黑色头像,你显示白色字体,没毛病。那我如果设置的是个白色头像,那字体如果仍为白色,用户就根本看不到字了。很显然体验感非常差。 如何解决?

采用RGB取色,对背景色进行分析,如果背景为深色,则字体颜色为浅色;若背景为浅色,则字体为深色。

效果图:

当图片为浅色时,字体为深色 在这里插入图片描述 当底色为深色时,字体颜色为浅色 在这里插入图片描述 看了效果之后,开始动手

1.获取背景图为深色还是浅色

getBitmapPixColor(Bitmap src):返回 true 图片为浅色;false为深色

/** * 判断图片颜色是深色还是浅色 * @param src * @return true 图片为浅色 */ public static boolean getBitmapPixColor(Bitmap src) { if (null == src) { return false; } int R = 0, G = 0, B = 0; int pixelColor; int height = src.getHeight(); int width = src.getWidth(); //获取RGB值 for (int y = 0; y pixelColor = src.getPixel(x, y); R = Color.red(pixelColor); G = Color.green(pixelColor); B = Color.blue(pixelColor); } } //将获取的RGB值进行计算,由192来区分为深色/浅色 int grayLevel = (int) (R * 0.299 + G * 0.587 + B * 0.114); return grayLevel > 192; } 2.处理字体颜色 private int setTitleTextColor(Boolean isNoDark){ int color=0; if(isNoDark){ //浅色时的字体颜色 color=Color.parseColor("#000000") }else{ //深色时字体颜色 color=Color.parseColor("#FFFFFF") } return color; } 3.应用 class TestActivity extends Activity(){ //将path地址转化为Bitmap private void changePathToBitmap(String path){ Glide.with(this).asBitmap().load(path).into(new SimpleTarget() { @Override public void onResourceReady(@NonNull Bitmap resource, @androidx.annotation.Nullable Transition transition) { //正式应用 调用上面的1,2方法 tv_name.setTextColor(setTitleTextColor(getBitmapPixColor(resource))); } }); } }

至此,整个效果完成。效果就是上面的两种类似的。 提供一个思路,各位砖友可以自由发挥~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有