V7兼容包——调色板Palette的使用
2015-04-04 11:29
281 查看
之前写过四篇文章是关于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有两种使用方法,分别是
同步的
异步的
使用这个方法得保证你有访问和图片加载有关的线程
该方法使用默认的颜色位数(DEFAULT_CALCULATE_NUMBER_COLORS=16),我们可以使用两个参数的方法指定位数
public static Palette generate(Bitmap bitmap, int numColors)
numColors的最佳值是视图片资源类型而定,对于风景图,12-16最佳,对于人脸的图片,该值需要增加到24-32才是最佳的。该值的增加,会增加计算的时间,如果没有特殊需求,使用默认值即可
下面是一个同步方法的使用例子
两个方法的区别和同步的两个方法区别是一样的,这两个方法是异步的,使用时需要传入一个监听器,该监听器的原型是
下面是一个异步方法的使用例子
返回一个有活力的颜色. Palette.getVibrantSwatch()
返回一个有活力的暗色. Palette.getDarkVibrantSwatch()
返回一个有活力的亮色. Palette.getLightVibrantSwatch()
返回一个柔和的颜色. Palette.getMutedSwatch()
返回一个柔和的暗色. Palette.getDarkMutedSwatch()
返回一个柔和的亮色. Palette.getLightMutedSwatch()
有活力的颜色和有活力的暗色是开发者使用最多的,具体使用哪一种取决于你自己
getRgb(): 返回一个 RGB 颜色值
getHsl(): 返回一个 HSL颜色值.
getBodyTextColor(): 返回一个适合做内容体颜色的颜色值
getTitleTextColor(): 返回一个适合做标题颜色的颜色值
标题的文本颜色会趋向于高透明度和低对比度,字体也会应该大一点,body的文本颜色会趋向于高不透明度和高对比度。
下面我们运用一下,按照个人习惯,先贴张效果图,至于代码呢。。。太渣了,就不贴了,有兴趣的自己下载源码去看吧。
源码下载
http://download.csdn.net/detail/sbsujjbcy/8563237
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
相关文章推荐
- 使用AppCompat_v7 21.0.0d的几个兼容问题
- 解决Eclips中使用V7兼容包的主题报错的问题
- Qt编程18:Qt调色板QPalette的使用
- Android Palette 调色板 的使用
- Qt编程18:Qt调色板QPalette的使用
- android Palette调色板的使用方法
- Android Material Design 详解(使用support v7兼容5.0以下系统(部分功能))
- 使用调色板Palette在背景图中取色
- Android Material Design 详解(使用support v7兼容5.0以下系统)
- 使用调色板Palette在背景图中取色
- Qt编程18:Qt调色板QPalette的使用
- 使用AppCompat_v7 21.0.0d的几个兼容问题
- Android Material Design 详解(使用support v7兼容5.0以下系统)
- Android仿新版微信主界面(使用android-support-v7兼容包,兼容2.2及其以上版本)
- Android Material Design 详解(使用support v7兼容5.0以下系统)
- Android开发之palette的使用(安卓调色板)
- android Palette调色板使用详解
- Android学习之5.0三姐妹调色板palette的使用
- Windows位图(Bitmap)和调色板(Palette)
- div+css使用padding样式和!important标记实现Firefox和IE6处理带float样式的margin尺寸上的兼容