Material Design全新设计系列之Pallette

本文详细介绍Android Palette库的使用方法,包括如何从图像中提取颜色并应用于UI控件,提供了同步和异步两种初始化方式,并展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,转载请注明出处

Palette介绍

A Color Pallette that includes all the colors respects Android
Material Design. Thanks “Marcel Ulbrich” for creating datas.

Palette英文名——调色板、颜料,Palette从图像中提取突出的颜色,赋给App UI控件如ActionBar、Toolbar、或者其他,清新简约的App很受人们追捧。


在这里插入图片描述

Palette用法汇总
从图像中提取突出的颜色如下:

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

Palette有两种初始化方法,同步异步。各自都有两个方法:

两种同步方法:

// 最好在加载图片线程中使用
// 默认调色板大小(16).
private static final int DEFAULT_CALCULATE_NUMBER_COLORS = 16;
Palette p = Palette.generate(bitmap);
//设置调色板大小numcolor
Palette p = Palette.generate(bitmap, numcolor);

**两种异步方法:**

// 内部使用AsyncTask
// 但是可能不是最优的方法(因为有线程的切换)
// 默认调色板大小(16).
Palette.generateAsync(bitmap,
new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// palette进行对UI控件的赋值
}
});
// 设置调色板大小
Palette.generateAsync(bitmap,
numcolor, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// palette为生成的调色板
}
});

通过Palette对象获取到六个样本
swatPalette.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();    //获取柔和的亮

对象对应的颜色方法:

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

### 效果图以及核心代码展示
一.AS开发——首先需要添加Palette的依赖:
在build.gralde的dependencies添加appcomat v7和palette-v7依赖,RecycleView展示瀑布流数据,所以相应的添加依赖

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:design:23.1.0'
compile 'com.android.support:appcompat-v7:21.0.+'
compile 'com.android.support:palette-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
}

注意:如果是Eclipse开发,需要导入相应的jar包。

核心代码如下:

   /**
     * 将数据与item视图进行绑定
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(final MyRecycleViewAdapter.ViewHolder holder, int position) {
        //文本赋值
        holder.tv.setText("我是文本" + position);
        ImageLoader.getInstance().displayImage(s[position], holder.imageView, new ImageLoadingListener() {
            //加载开始
            @Override
            public void onLoadingStarted(String s, View view) {}

            //加载失败
            @Override
            public void onLoadingFailed(String s, View view, FailReason failReason) {}

            //加载完成
            @Override
            public void onLoadingComplete(String s, View view, Bitmap bitmap) {

                holder.imageView.setImageBitmap(bitmap);
                if (bitmap != null) {
                Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
                        @Override
             public void onGenerated(Palette palette) {
                            //以获取明亮的色调为例
                 Palette.Swatch vibrant =
                 palette.getVibrantSwatch();
           if (vibrant != null) {
              // If we have a vibrant color
             // update the title TextView
           holder.tv.setBackgroundColor(
               vibrant.getRgb());
               holder.tv.setTextColor(
               vibrant.getTitleTextColor());
                            }

                        }
                    });
                }
            }

            @Override
            public void onLoadingCancelled(String s, View view) {}
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值