Android Lollipop 新特性 – Palette;获取图片颜色

Android Lollipop 新特性 – Palette

在Android 5.0 之后推出的palette,通过这个方法,我们就可以从一张 bitmap 中提取我们需要的颜色,可以使UI风格更加美观融洽。比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化。

Palette可以提取的颜色如下:

  • Vibrant (有活力的)
  • Vibrant dark(有活力的 暗色)
  • Vibrant light(有活力的 亮色)
  • Muted (柔和的)
  • Muted dark(柔和的 暗色)
  • Muted light(柔和的 亮色)

使用方法

compile ‘com.android.support:palette-v7:25.1.0’

通过一个Bitmap对象来生成一个对应的Palette对象

BitmapDrawable drawable = (BitmapDrawable) getResources().getDrawable(R.drawable.pic);
Bitmap bitmap = drawable.getBitmap();

Palette.Builder builder = Palette.from(bitmap);

拿到提取到的颜色值

  • Palette.getVibrantSwatch()
  • Palette.getDarkVibrantSwatch()
  • Palette.getLightVibrantSwatch()
  • Palette.getMutedSwatch()
  • Palette.getDarkMutedSwatch()
  • Palette.getLightMutedSwatch()
AsyncTask<Bitmap, Void, Palette> generate = builder.generate(new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
        // 有活力的颜色
        vibrant = palette.getVibrantSwatch();
        // 有活力的暗色
        darkVibrant = palette.getDarkVibrantSwatch();
        // 有活力的亮色
        lightVibrant = palette.getLightVibrantSwatch();
        // 柔和的颜色
        muted = palette.getMutedSwatch();
        // 柔和的暗色
        darkMuted = palette.getDarkMutedSwatch();
        // 柔和的亮色
        lightMuted = palette.getLightMutedSwatch();

        // 使用颜色
        // 修改Actionbar背景颜色
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(vibrant.getRgb()));

        ((Button) findViewById(R.id.text)).setTextColor(vibrant.getTitleTextColor());
        ((Button) findViewById(R.id.text)).setBackgroundColor(vibrant.getRgb());
        ((Button) findViewById(R.id.text1)).setTextColor(darkVibrant.getTitleTextColor());
        ((Button) findViewById(R.id.text1)).setBackgroundColor(darkVibrant.getRgb());
        ((Button) findViewById(R.id.text2)).setTextColor(lightVibrant.getTitleTextColor());
        ((Button) findViewById(R.id.text2)).setBackgroundColor(lightVibrant.getRgb());
        ((Button) findViewById(R.id.text3)).setTextColor(muted.getTitleTextColor());
        ((Button) findViewById(R.id.text3)).setBackgroundColor(muted.getRgb());
        ((Button) findViewById(R.id.text4)).setTextColor(darkMuted.getTitleTextColor());
        ((Button) findViewById(R.id.text4)).setBackgroundColor(darkMuted.getRgb());
        ((Button) findViewById(R.id.text5)).setTextColor(lightMuted.getTitleTextColor());
        ((Button) findViewById(R.id.text5)).setBackgroundColor(lightMuted.getRgb());
    }
});

Swatch 样本对象,这个样本对象是Palette的一个内部类,它提供了一些获取最终颜色的方法

  • getPopulation(): 样本中的像素数量
  • getRgb(): 颜色的RBG值
  • getHsl(): 颜色的HSL值
  • getBodyTextColor(): 主体文字的颜色值
  • getTitleTextColor(): 标题文字的颜色值

Palette 实例

Android Lollipop 新特性 - Palette;获取图片颜色