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

Posted xhBruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;获取图片颜色的主要内容,如果未能解决你的问题,请参考以下文章

不得不看的16项安卓5.0系统的新特性

有史来最大改变 Android 5.0十大新特性

Android 5.0 Lollipop介绍

如何使用为 Android 5.0 (Lollipop) 提供的新 SD 卡访问 API?

在 Android Lollipop 中扩展 Preference 类 = 丢失动画

Android Support Library 23.2都有哪些新东西