Android Palette颜色提取

Palette介绍

Palette是Google在5.0中引入的来获取bitmap颜色值的一个工具类,为了兼容以前的版本,所以放在Support v7 Library中,在使用该类之前,需要在gradle中添加引用。Palette顾名思义调色板, Palette的作用是可以从图像中提取图片的颜色。我们可以把提取的颜色融入到App UI中,可以使UI风格更加美观融洽。
Palette可以提取的颜色如下

  • Vibrant
  • Vibrant Dark
  • Vibrant Light
  • Muted
  • Muted Dark
  • Muted Light

通过Palette对象获取到六个样本swatch

Palette.Swatch s = p.getVibrantSwatch();       //获取到充满活力的这种色调
Palette.Swatch s = p.getDarkVibrantSwatch();    //获取充满活力的黑
Palette.Swatch s = p.getLightVibrantSwatch();   //获取充满活力的亮
Palette.Swatch s = p.getMutedSwatch();           //获取柔和的色调
Palette.Swatch s = p.getDarkMutedSwatch();      //获取柔和的黑
Palette.Swatch s = p.getLightMutedSwatch();    //获取柔和的亮

swatch对象对应的颜色方法

  • getPopulation(): 像素的数量
  • getRgb(): RGB颜色
  • getHsl(): HSL颜色
  • getBodyTextColor(): 用于内容文本的颜色
  • getTitleTextColor(): 标题文本的颜色

集成Palette

在使用该类之前,需要在gradle中添加引用

dependencies {
    compile 'com.android.support:palette-v7:25.3.0'
}

Palette是一个调色板,通过传入一个bitmap对象来获取一个颜色列表,

首先要获取一个Palette实例,

Palette.from(bitmap).generate() 
Palette.generate(bitmap) 
Palette.generate(bitmap, mMaxColors)

其中maxColor是颜色值的范围,如果是风景画一般范围在10-16之间,如果是人像的话则范围应增加到24,该值默认为16

示例:

Palette p = Palette.from(convertViewToBitmap(view)).generate();
Palette.Swatch swatch = p.getVibrantSwatch();
if (swatch != null) {
    tvShow.setBackgroundColor(swatch.getRgb());
}

public Bitmap convertViewToBitmap(View view) {
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap bitmap = view.getDrawingCache();
    return bitmap;
}

这些颜色都有相应的 getter 方法获取。这里要提到一个 Swatch (样品)类。对 Palette 对象所有颜色相关的操作都可以通过 Swatch 类间接获取。像上面这六种色调,都能通过对应的 Swatch 对象获取到。比如,获取图片主题色,可以直接从 palette 对象中获取:

int color = palette.getDominantColor(ContextCompat.getColor(mContext, R.color.blue));

也可以通过 swatch 对象间接获取:

int color = palette.getDominantSwatch().getRgb();

差别在于,Swatch 对颜色的相关信息做了一个封装处理。通过 Swatch 对象,我们可以获取颜色的 RGB、HSL 等值,和当前颜色在图片中的占比。更重要的一点是,能够获取适合显示在当前颜色背景中的内容色,比如文本标题颜色等。不得不说,Google 想的真周到,并且在源码设计上也是非常独到。

猜你喜欢

转载自my.oschina.net/ososchina/blog/1789460