主题颜色提取 ——— Palette

Palette

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的贵南网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

调色板 Palette 是 Android L SDK 中的新特性。可以使用 Palette 从图像中提取出突出的颜色(主色调),获取到颜色之后我们再将这个颜色值赋给 ActionBar、状态栏等。从而达到界面色调的统一,使界面美观协调。

Palette 可以提取图片中如下几种特性的颜色:

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

内部嵌套类

  • Palette.Builder

生成器类,生成 Palette 实例。

  • Palette.Filter

过滤器接口,使 Palette 有更加细腻的颜色过滤

  • Palette.PaletteAsyncListener

异步加载监听

  • pattle.Swatch

提供获取结果的色彩样本

所有的公共方法

返回值类型方法及说明
static Palettefrom(List switches)
通过预设的 Palette.Swatch 颜色样本列表 来生成 Palette
static Palette.Builderfrom(Bitmap bitmap)
通过返回 Palette.Builder 实例来构建 Palette
static Palettegenerate(Bitmap bitmap,int numColors)
该方法已被遗弃,建议用 Palette.Builder 来生成Palette
static Palettegenerate(Bitmap bitmap)
该方法已被遗弃,建议用 Palette.Builder 来生成Palette
static AsyncTaskgenerateAsync(Bitmap bitmap,int numColor,Palette.PaletteAsyncListener listener)
该方法已被遗弃,建议用 Palette.Builder 来生成Palette
static AsyncTaskgenerateAsync(Bitmap bitmap,Palette.PaletteAsyncListener listener)
该方法已被遗弃,建议用 Palette.Builder 来生成Palette
intgetColorForTarget(Target target,int defaultColor)
返回一个从目标获取的的 rgb 色值
intgetDarkMutedColor(int defaultColor)
返回一个柔和的暗色调 rgb 值
Palette.SwatchgetDarkMutedSwatch()
返回一个柔和的暗色调样本类
intgetDarkVibrantColor(int defaultColor)
返回一个鲜明的暗色调 rgb 值
Palette.SwatchgetDarkVibrantSwatch()
返回一个鲜明的暗色调样本类
intgetDomainColor(int defaultColor)
返回 Palette 中的主色调 rgb值
Palette.SwatchgetDomainSwatch()
返回一个主色调的样本类
intgetLightMutedColor(int defaultColor)
返回一个柔和的亮色调颜色 rgb
Palette.SwatchgetLightMutedSwatch()
返回一个柔和的亮色调样本类
intgetLightVibrantColor(int defaultColor)
返回一个鲜明的亮色调 rgb
Palette.SwatchgetLightVibrantSwatch()
返回一个鲜明的亮色调样本类
intgetMutedColor(int defaultColor)
返回一个柔和的颜色 rgb
Palette.SwatchgetMutedSwatch()
返回一个柔和的颜色样本类
Palette.SwatchgetSwatchForTarget(Target target)
为给定的目标从 Palette 中返回一个选中样本,如果未找到则返回空
ListgetSwatches()
获取所有用在Palette中的Swatch样本类
ListgetTargets()
获取所有构造 Palette 的 Target
intgetVibrantColor(int defaultColor)
获取一个鲜明的颜色 rgb
Palette.SwatchgetVibrantSwatch()
获取一个鲜明的样本类

使用方式

使用 Palette 需先引入 Palette 的 support 资源包:

 
 
 
  1. compile 'com.android.support:palette-v7:25.1.0' 

加载不能在主线程中进行,加载方式有同步加载和异步加载两种:

  • 同步
 
 
 
  1. //在加载图片的后台线程中同步加载Palette palette = Palette.from(bitmap).genrate(); 
  2. .  
  • 异步
 
 
 
  1. //异步加载Palette.from(bitmap).genrate(new PaletteAsyncListener(){  public void onGenerated(Palette p){ 
  2.       . 
  3.       . 
  4.       . 
  5.   } 
  6. });  

具体使用代码

这里使用 MvpDemo 中的部分代码,跟 Glide 配合起来使用的,其他辅助类代码直接 Demo 中查看。

 
 
 
  1. //这是 Glide 加载状态的监听回调@Overridepublic boolean onResourceReady(GlideDrawable resource, String model, Target target,boolean isFromMemoryCache, boolean isFirstResource) {  //获取到 Glide 加载图片的 Bitmap 
  2.   final Bitmap bitmap = GlideUtils.getBitmap(resource);  //获取到24dp的长度 
  3.   final int twentyFourDip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,                  24, ZhihuStoryInfoActivity.this.getResources().getDisplayMetrics());  assert bitmap != null; 
  4.   Palette.from(bitmap)          //设置构建 Palette 时使用的最大颜色数,风景景观推荐值在10-16,人脸图像色值增加到24 
  5.           .maximumColorCount(3) 
  6.           .clearFilters() 
  7.           .setRegion(0, 0, bitmap.getWidth() - 1, twentyFourDip) 
  8.           .generate(new Palette.PaletteAsyncListener() {              @Override 
  9.               public void onGenerated(Palette palette) {                  boolean isDark;                  int lightness = ColorUtils.isDark(palette);                  if (lightness == ColorUtils.LIGHTNESS_UNKNOWN) { 
  10.                       isDark = ColorUtils.isDark(bitmap, bitmap.getWidth() / 2, 0); 
  11.                   } else { 
  12.                       isDark = lightness == ColorUtils.IS_DARK; 
  13.                   }                  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                      int statusBarColor = getWindow().getStatusBarColor();                      final Palette.Swatch topColor = ColorUtils.getMostPopulousSwatch(palette);                      if (topColor != null && (isDark || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)) { 
  14.                           statusBarColor = ColorUtils.scrimify(topColor.getRgb(), isDark, SCRIM_ADJUSTMENT);                          if (!isDark && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
  15.                               ViewUtils.setLightStatusBar(mStoryImg); 
  16.                           } 
  17.                       }                      if (statusBarColor != getWindow().getStatusBarColor()) { 
  18.                           ValueAnimator statusBarColorAnim = ValueAnimator.ofArgb( 
  19.                                   getWindow().getStatusBarColor(), statusBarColor); 
  20.                           statusBarColorAnim 
  21.                               .addUpdateListener(new ValueAnimator 
  22.                               .AnimatorUpdateListener() {                                  @Override 
  23.                                   public void onAnimationUpdate(ValueAnimator animation) { 
  24.                                       getWindow().setStatusBarColor((int) animation.getAnimatedValue()); 
  25.                                   } 
  26.                               });                                  //设置转换颜色的动画时间 
  27.                                   statusBarColorAnim.setDuration(1000L); 
  28.                                   statusBarColorAnim.setInterpolator(                                          new AccelerateInterpolator()); 
  29.                                   statusBarColorAnim.start(); 
  30.                       } 
  31.                   } 
  32.               } 
  33.           }); 

名称栏目:主题颜色提取 ——— Palette
本文来源:http://www.shufengxianlan.com/qtweb/news46/94696.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联