V7兼容包——调色板Palette的使用

之前写过四篇文章是关于v7兼容包RecyclerView的使用

android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理

android v7兼容包RecyclerView的使用(三)——布局管理器的使用

android v7兼容包RecyclerView的使用(二)

android v7兼容包RecyclerView的使用(一)

今天无意看到一个v7兼容包中另一个库Palette,就学习了下,这个库有什么作用呢,说白了就是用它实现动态颜色的设置。

Material Design鼓励开发者使用动态颜色,尤其是当我们有丰富的图片资源要显示时,v7兼容包中的Palette库就是这样诞生的,它可以让我们从一张图片中抽取一部分颜色去控制我们的UI元素,从而创造一个沉浸式的体验,抽取的颜色会包括充满活力的和柔和的色调,这些色调会使前景文本颜色具有最佳的视觉效果

在我们使用Palette这个库前,让我们先将这个依赖文件从sdk中找出,它在下面这个位置

..\sdk\extras\android\support\v7\palette\libs\android-support-v7-palette.jar

我们创建一个项目,将其复制到libs目录下。

Palette有两种使用方法,分别是

  • 同步的
  • 异步的

同步方法

public static Palette generate(Bitmap bitmap)

使用这个方法得保证你有访问和图片加载有关的线程

该方法使用默认的颜色位数(DEFAULT_CALCULATE_NUMBER_COLORS=16),我们可以使用两个参数的方法指定位数

public static Palette generate(Bitmap bitmap, int numColors)

numColors的最佳值是视图片资源类型而定,对于风景图,12-16最佳,对于人脸的图片,该值需要增加到24-32才是最佳的。该值的增加,会增加计算的时间,如果没有特殊需求,使用默认值即可

下面是一个同步方法的使用例子

 Bitmap map=BitmapFactory.decodeResource(getResources(), R.drawable.qblog_fig3);
 Palette generate = Palette.generate(map);
 Swatch vibrantSwatch = generate.getVibrantSwatch();
TextView tv=(TextView)findViewById(R.id.title);
tv.setTextColor(vibrantSwatch.getRgb());

异步方法

 public static AsyncTask<Bitmap, Void, Palette> generateAsync(Bitmap bitmap, PaletteAsyncListener listener)
  public static AsyncTask<Bitmap, Void, Palette> generateAsync(
            final Bitmap bitmap, final int numColors, final PaletteAsyncListener listener)

两个方法的区别和同步的两个方法区别是一样的,这两个方法是异步的,使用时需要传入一个监听器,该监听器的原型是

 public interface PaletteAsyncListener {

        /**
         * Called when the {@link Palette} has been generated.
         */
        void onGenerated(Palette palette);
    }

下面是一个异步方法的使用例子

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
              titleView.setBackgroundColor(vibrant.getRgb());
              titleView.setTextColor(vibrant.getTitleTextColor());
          }
    }
});

Palette 的属性

Palette.Swatch是一个提取颜色的样本,通过该类可以提取到包含了我们需要的颜色内容

  • 返回一个有活力的颜色. Palette.getVibrantSwatch()
  • 返回一个有活力的暗色. Palette.getDarkVibrantSwatch()
  • 返回一个有活力的亮色. Palette.getLightVibrantSwatch()
  • 返回一个柔和的颜色. Palette.getMutedSwatch()
  • 返回一个柔和的暗色. Palette.getDarkMutedSwatch()
  • 返回一个柔和的亮色. Palette.getLightMutedSwatch()

有活力的颜色和有活力的暗色是开发者使用最多的,具体使用哪一种取决于你自己

Swatch 属性

  • getPopulation(): 返回被该样本代表的像素的总数
  • getRgb(): 返回一个 RGB 颜色值
  • getHsl(): 返回一个 HSL颜色值.
  • getBodyTextColor(): 返回一个适合做内容体颜色的颜色值
  • getTitleTextColor(): 返回一个适合做标题颜色的颜色值

标题的文本颜色会趋向于高透明度和低对比度,字体也会应该大一点,body的文本颜色会趋向于高不透明度和高对比度。

下面我们运用一下,按照个人习惯,先贴张效果图,至于代码呢。。。太渣了,就不贴了,有兴趣的自己下载源码去看吧。

源码下载

http://download.csdn.net/detail/sbsujjbcy/8563237

时间: 2024-10-23 07:40:53

V7兼容包——调色板Palette的使用的相关文章

android v7兼容包RecyclerView的使用(三)——布局管理器的使用

前两篇文章 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的基本用法以及与它相关的重要的几个类,本篇文章介绍布局管理器的具体用法. 为了演示布局管理器的使用,找了很多个例子,都没有找到感觉合适的例子,后来google了一把,发现了一个比较适合说明问题的例子.所以就拿该例子来解释吧. 在演示布局管理器前,我们先把UI部分搭建完成.由于使用到了V7兼容包的另一个包CardView,所以在这

android v7兼容包RecyclerView的使用(二)

上篇文章 android v7兼容包RecyclerView的使用(一)讲了RecyclerView的最基本用法,现在开始挖掘更详细的内容. 在RecyclerView的API中,有这样一句话 A flexible view for providing a limited window into a large data set. 大致意思就是:当有大量的数据显示在一个有限大小的窗口上时,RecyclerView就是解决这种情况的一个灵活的View. 从以上描述可以看出RecyclerView的

android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理

前三篇文章 android v7兼容包RecyclerView的使用(三)--布局管理器的使用 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的使用以及常见的相关类和布局管理器的灵活之处.写了这么多篇,还没涉及到用户交互,那么怎么处理点击事件呢. 在RecyclerView中你会惊奇的发现,该类中并没有OnItemClickListener监听器监听我们的单击事件,也没有OnItemL

android v7兼容包RecyclerView的使用(一)

什么是RecyclerView?个人理解,它是一个在数据量大的时候,为了显示在界面上提供的灵活高效处理的控件.可以替代listview,gallery,gridview等控件. 如何使用?本篇文章只是热热身,不会过多介绍细节. 首先需要导入\sdk\extras\android\support\v7\recyclerview\libs\android-support-v7-recyclerview.jar包,如果sdk目录下没有该文件,则adt版本可能太低,建议升级或者从网上下载该库. Recy

解决Eclips中使用V7兼容包的主题报错的问题

新建项目默认会使用v7包中的主题,如果你workplace中没有v7库,那是一定会报错的. 1.导入v7jar,没用,因为需要的是v7的资源文件 2.既然如此,导入v7的整个项目应该ok了吧,import之后,尼玛还报错,百思不得骑姐,删了导,导了删,把SDK都弄坏了还是报错.并且build path还不报错. 终极大招,原来原因是因为v7库和项目没有在一个盘符下,import的时候,注意要勾选copy projects into workplace,也就是把依赖库从sdk复制一份到当前的wor

在Eclipse添加Android兼容包( v4、v7 appcompat )[转]

昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support Library 方法1:右击项目→选择Android Tools→Add Support Library… 方法2: 通过SDK Manager获取Support Library: 1.打开Android SDK Manager 2.在SDK Manager窗口,滚动到Package List的末尾

在Eclipse添加Android兼容包( v4、v7 appcompat )(转)

昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support Library 方法1:右击项目→选择Android Tools→Add Support Library… 方法2: 通过SDK Manager获取Support Library: 1.打开Android SDK Manager 2.在SDK Manager窗口,滚动到Package List的末尾

在Eclipse添加Android兼容包( v4、v7 appcompat )

如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support Library 方法1:右击项目→选择Android Tools→Add Support Library… 方法2: 通过SDK Manager获取Support Library: 1.打开Android SDK Manager 2.在SDK Manager窗口,滚动到Package List的末尾,找到Extra文件夹,如果需要的话打开文件夹显示它的内容. 3.选择Andro

在Eclipse添加Android兼容包 v4 v7 appcompat

昨天添加Android兼容包,碰到了很多问题,在这里记录一下,让后面的路好走. 如何选择兼容包, 请参考Android Support Library Features(二) 一.下载Support Library 方法1:右击项目→选择Android Tools→Add Support Library- 方法2: 通过SDK Manager获取Support Library: 1.打开Android SDK Manager 2.在SDK Manager窗口,滚动到Package List的末尾