首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Android-界面设计-Palette-获得图片主要颜色【2019-附使用方法】

Android-界面设计-Palette-获得图片主要颜色【2019-附使用方法】

作者头像
圆号本昊
发布2021-09-24 12:00:03
发布2021-09-24 12:00:03
9660
举报
文章被收录于专栏:github@hornhuanggithub@hornhuang

1:用途说明

通常情况下,界面的 UI 不会随着内容的改变而改变(比如)图片切换而改变,如下图:

这时我们就用到了 Palette 获取图片中的颜色,并把它设置在空间中,是的界面更加美观:

2: 导入依赖

代码语言:javascript
复制
implementation 'com.android.support:palette-v7:28.0.0'

3: 使用举例

调用 Palette.from() 方法将bitmap传入,然后在回调中获取颜色值。

代码语言:javascript
复制
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                Palette.Swatch vibrant = palette.getVibrantSwatch();
                if (vibrant == null) {
                    for (Palette.Swatch swatch : palette.getSwatches()) {
                        vibrant = swatch;
                        break;
                    }
                }
                // 这样获取的颜色可以进行改变。
                int rbg = vibrant.getRgb();

                // ... 省略一些无关紧要的代码
                imageView.setBackgroundColor(rbg);
                if (Build.VERSION.SDK_INT > 21) {
                    Window window = getWindow();
                    //状态栏改变颜色。
                    int color = changeColor(rbg);
                    window.setStatusBarColor(color);
                }

对于 Palette 获得的颜色 rbg 要进行如下换算:

代码语言:javascript
复制
private int changeColor(int rgb) {
    int red = rgb >> 16 & 0xFF;
    int green = rgb >> 8 & 0xFF;
    int blue = rgb & 0xFF;
    red = (int) Math.floor(red * (1 - 0.2));
    green = (int) Math.floor(green * (1 - 0.2));
    blue = (int) Math.floor(blue * (1 - 0.2));
    return Color.rgb(red, green, blue);
}

综上就能实现范例图片中的效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/02/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1:用途说明
  • 2: 导入依赖
  • 3: 使用举例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档