laobie / StatusBarUtil

A util for setting status bar style on Android App.
http://t.cn/Rq746Kb
Apache License 2.0
8.8k stars 1.72k forks source link

颜色值计算有问题 #127

Closed toutoumu closed 7 years ago

toutoumu commented 7 years ago
private static int calculateStatusColor(@ColorInt int color, int alpha) {
        if (alpha == 0) {
            return color;
        }
        float a = 1 - alpha / 255f;
        int red = color >> 16 & 0xff;
        int green = color >> 8 & 0xff;
        int blue = color & 0xff;
        red = (int) (red * a + 0.5);
        green = (int) (green * a + 0.5);
        blue = (int) (blue * a + 0.5);
        return 0xff << 24 | red << 16 | green << 8 | blue;
    }
  1. 透明度为0的时候应该返回 0 2.指定了透明度最后返回的颜色值是0xff开头的颜色值,为不透明的颜色

其他问题

  1. setColor方法应该是先判断颜色值是否包含透明度值,如果包含那么直接使用,如果不包含,那么使用0xff 给定一个默认透明度值不符合常理. public static void setColor(Activity activity, @ColorInt int color) { setColor(activity, color, DEFAULT_STATUS_BAR_ALPHA); }
laobie commented 7 years ago

这个你估计理解错了,设置到状态栏上的不是一个包含透明度的颜色,是一个没有透明度的颜色。

这里的计算颜色其实是为了模拟官方半透明的状态栏。