问题记录——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(...);//...为回调方法,上面已列出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值