900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【Android】动态获取当前背景图 根据背景图色动态改变字体颜色

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

时间:2023-02-17 04:47:56

相关推荐

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

情况描述:市面上很多的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 < height; y++) {for (int x = 0; x < width; x++) {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地址转化为Bitmapprivate void changePathToBitmap(String path){Glide.with(this).asBitmap().load(path).into(new SimpleTarget<Bitmap>() {@Overridepublic void onResourceReady(@NonNull Bitmap resource, @androidx.annotation.Nullable Transition<? super Bitmap> transition) {//正式应用 调用上面的1,2方法 tv_name.setTextColor(setTitleTextColor(getBitmapPixColor(resource)));}});}}

至此,整个效果完成。效果就是上面的两种类似的。

提供一个思路,各位砖友可以自由发挥~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。