最近开发Android音乐,遇到关于沉浸式状态栏的问题,当音乐封面背景图片和状态栏融合到一起时,如果状态栏的字体设置为白色或者浅色,这时背景图片的颜色也是白色,导致状态栏的字体几乎看不到的问题。如下图
这时,如果只是单纯的设置状态栏的字体颜色,这样是不行,因为每播放一首歌,他得封面是不同的,有的颜色深,有的颜色浅,这时候要去判断背景图片的bitmap值,来设置不同的状态栏字体颜色,即所谓的自适应。
核心代码如下:
public static int generateBitmapYAverage(Bitmap bitmap) { int[] pixels = getBitmapPixels(bitmap, true); long totalY = 0; for (int pixel : pixels) { totalY += (Color.red(pixel) * 0.299f + Color.green(pixel) * 0.587f + Color.blue(pixel) * 0.114f); } return (int) (totalY / pixels.length); }这里主要是获取图片背景的背景色值,然后加以判断
if (CommonActivity.generateBitmapYAverage(activity.playBitmap) >= 200) { CommonActivity.sForeGroundColor = CommonActivity.sBlackColor; } else { CommonActivity.sForeGroundColor = CommonActivity.sWhiteColor; } updateTextForegroundColor(CommonActivity.sForeGroundColor, (ViewGroup) getWindow().getDecorView());就可以实现不同情况下的状态栏显示。
总而言之,在很多情况下,这个还是必须的,例如桌面壁纸的设置等,在变化的背景图片下,需要我们自己去设置状态栏的颜色。