问题记录——Palette生成调色板个数为0

在做沉浸式状态栏时,需要实现状态栏字体颜色随背景深浅改变,深色背景显示亮色文字,浅色背景显示深色文字,看了郭霖的文章(一个Android沉浸式状态栏上的黑科技_guolin的博客-CSDN博客_android 沉浸式 郭霖)后,决定用Palette实现,代码如下:

Palette.from(bitmap).maximumColorCount(count).setRegion(left, top, right, bottom)
                .generate(new Palette.PaletteAsyncListener() {
        @Override
        public void onGenerated(@androidx.annotation.Nullable @Nullable Palette palette) {
            Palette.Swatch mostPopularSwatch = null;
            for (Palette.Swatch swatch : palette.getSwatches()) {
                if (mostPopularSwatch == null
                        || swatch.getPopulation() > mostPopularSwatch.getPopulation()) {
                    mostPopularSwatch = swatch;
                }
            }
            if (mostPopularSwatch != null){
                double luminance = ColorUtils.calculateLuminance(mostPopularSwatch.getRgb());
                // 当luminance小于0.5时,我们认为这是一个深色值.
                mIsDarkBack = luminance < 0.5;
                if (luminance < 0.5) {
                    setLightStatusBar();
                } else {
                    setDarkStatusBar();
                }
            }
        }
    });

但是这样会有一个问题,当选取范围是纯黑和纯白时palette.getSwatches()是空的,就无法判断是深色还是浅色背景。

解决方法:

多调用一个.clearFilters()方法,代码如下:

Palette.from(bitmap).maximumColorCount(count).setRegion(left, top, right, bottom)
                .clearFilters().generate(...);//...为回调方法,上面已列出

猜你喜欢

转载自blog.csdn.net/qq_43679375/article/details/126288689
今日推荐