zoukankan      html  css  js  c++  java
  • Palette 的使用

    Palette有什么用?

    Palette主要功能就是可以从图片中提取各种与颜色有关的元素。通过使用 Palette ,我们可以很轻松的实现界面风格的统一。

    Palette的使用很简单,首先你可以从github上添加 palette 的依赖

    compile 'com.android.support:palette-v7:26.0.0-alpha1'

    或者直接右键你的项目,在OpenmoduleSetting->dependenecies->LibraryDependency 中直接搜索添加 Palette 。

    然后你就可以在代码中使用 Palette 了

    具体使用如下:

            Palette.Builder builder = Palette.from(BitmapFactory.decodeResource(getResources(), R.drawable.xxx));
            builder.generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {
    
    //                Palette.Swatch swatch = palette.getVibrantSwatch();  //充满活力的色调
    //                Palette.Swatch swatch = palette.getLightVibrantSwatch();  //充满活力的亮色调
    //                Palette.Swatch swatch = palette.getDarkVibrantSwatch();  //充满活力的暗色调
    
    //                Palette.Swatch swatch = palette.getMutedSwatch();  //柔和的色调
    //                Palette.Swatch swatch = palette.getLightMutedSwatch();  //柔和的亮色调
    //                Palette.Swatch swatch = palette.getDarkMutedSwatch();  //柔和的暗色调
    //
                    int color;
                    Palette.Swatch swatch = palette.getDominantSwatch();
                    if (swatch == null) {
                        color = palette.getDominantColor(getResources().getColor(R.color.colorTheme));  //如果提取不到颜色样本,就使用默认颜色
                    } else {
                        color = swatch.getRgb();   //如何提取到颜色样本,就从颜色样本中获得颜色
                    }
                    int darkColor = colorBurn(color);  //对颜色进行处理,使颜色更深
                    changeThemeColor(color, darkColor);  //切换主题颜色
                }
            });

    该方法是通过异步的方式获得颜色,先通过 Palette.from(Bitmap)传入图片,当 Palette 提取好图片颜色后就会调用 onGenerated(Palette)方法,该方法会传入一个 Palette对象,我们在该方法中对该 Palette 进行一系列操作。

    一个 Palette 对象中会保存着该图片的好几种颜色样本,通过上面的代码你可以看到颜色样本的分类。

    我们可以通过 palette.getxxxSwatch()方法得到不同的颜色样本(swatch),然后再调用 swatch.getRgb()就可以得到每个样本(swatch)中对应的 RGB 颜色。不同样本获取到的RGB颜色也各不相同,具体的效果你可以自己去试。这里需要注意的是,由于不同图片的颜色不同,有些图片会出现某些 swatch 对象获取不到的状况,如果不做处理就会报空指针错误,并且提取不到颜色。我们可以通过 palette.getxxxColor(int)方法来设置默认的颜色,当 swatch 提取不到颜色时就使用该颜色。

    上述代码中获取颜色之后,又调用了colorBurn(int)方法,用来对获取到的颜色进行深色处理。因为一般系统状态栏的颜色都会比界面中的颜色要深一些,所以我们可以通过该方法获取到更深的颜色给系统状态栏。该方法具体实现如下:

        //获得更深的颜色
        private int colorBurn(int color) {
            int alpha = color >> 24;
            int red = color >> 16 & 0xFF;
            int green = color >> 8 & 0xFF;
            int blue = color & 0xFF;
            red = (int) Math.floor(red * (1 - 0.1));
            green = (int) Math.floor(green * (1 - 0.1));
            blue = (int) Math.floor(blue * (1 - 0.1));
            return Color.rgb(red, green, blue);
        }

    获取到颜色后,你就可以给想要设置颜色的控件进行上色了。

    如果你想要给系统状态栏和底部的 NavigationBar 上色,可以这样写:

            if (android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.setStatusBarColor(colorBurn(color));  //设置系统栏颜色
                window.setNavigationBarColor(colorBurn(color));  //设置底部NavigationBar颜色
            }

    另外再补充说一下swatch 中的一些方法。swatch 除了getRgb()方法获取 RGB 颜色之外,还有其他获取颜色的方法,具体如下:

    swatch.getPopulation():  //像素的数量
    swatch.getRgb():  //RGB颜色
    swatch.getHsl():  //HSL颜色
    swatch.getBodyTextColor():  //用于内容正文文本的颜色
    swatch.getTitleTextColor():  //标题文本的颜色
  • 相关阅读:
    000 初步使用Kotlin开发Android应用
    使用Kotlin开发Android应用
    使用Kotlin开发Android应用(IV):自定义视图和Android扩展
    使用Kotlin开发Android应用(III):扩展函数和默认值
    使用Kotlin开发Android应用(II):创建新工程
    使用Kotlin开发Android应用
    Retrofit2.2说明-简单使用
    Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
    android开发环境 eclipse + android sdk配置笔记
    Android 百度地图定位(手动+自动) 安卓开发教程
  • 原文地址:https://www.cnblogs.com/weimore/p/7404304.html
Copyright © 2011-2022 走看看