Android5.0之Palette简单实用
2016-01-26 10:11
519 查看
一直想学学android5.0的新特性,但是由于模拟器的原因,一直没有了却这个心愿。
今天是个悲剧的一天,但不是有那么一句老话吗“塞翁失马,焉知非福”。先说说今天吧,
不知道咋回事,genymotion数据全丢失了,没办法,只能重新下载新的数据,就是在选择版本的过程中,突然发现了5.0, 好激动,赶快下载下来体验一把。
UI是不是特别爽,感觉可以秒杀iOS好几条街了,
好了,不扯淡了,进入今天的主题Palette。
Palette,中文名:调色板,也就是android允许我们动态的获取颜色,至于这些颜色怎么处理,就看你个人的爱好和需求了。
那么怎么获取颜色呢? 从哪获取颜色?
先来回答第二个问题,一般情况,我们是从图片抓取颜色,然后设置到该图片的介绍(文本颜色和背景颜色)。
这样做有什么好处? 可以保证图片和文字介绍在同一个色调上。是不是很爽?
再来看看第一个问题如何获取? 答案也很简单,就是我们今天要用的Palette。
依照惯例,先上代码,
哦,不对,上代码之前,还得说一下Palette怎么使用,好,找到你的android5 sdk的下来目录,依次定位到sdk\extras\android\support\v7\palette目录下,再打开libs目录,可以看到里面有一个android-support-v7-palette.jar文件,将这个文件copy到你项目的libs目录下,这样你的项目才可以使用Palette。
准备工作完成了,来看看具体实现代码吧。
先看看布局文件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.loader.palette.MainActivity"
>
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<<a href="http://code.662p.com/list/2943_1.html"
target="_blank" class="relatedlink" style="word-wrap: break-word; outline: none; color: rgb(51, 102, 153); border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: blue;">TextView
android:layout_below="@id/iv"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
/>
复制代码
很简单,一个ImageView和一个TextView,过会,我们就通过代码,根据ImageView上的图片的主色调来调整TextView的色调。
public class MainActivity
extends Activity {
private
ImageView mImageView;
private
TextView mTextView;
@Override
protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView
= (ImageView) findViewById(R.id.iv);
mTextView
= (TextView) findViewById(R.id.tv);
BitMap bmp
= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Palette.generateAsync(bmp,
new Palette.PaletteAsyncListener() {
@Override
public
void onGenerated(Palette palette) {
Palette.Swatch
swatch = palette.getVibrantSwatch();
if(null
!= swatch) {
mTextView.setBackgroundColor(swatch.getRgb());
mTextView.setTextColor(swatch.getTitleTextColor());
}
}
});
}
}
复制代码
在介绍代码之前,首先说一下Palette这个类,看一下文档,这个类并没有提供可用的构造方法,而且提供了一系列的静态generate和generateAsync方法,很好理解,就是生成的意思,来说说generate和generateAsync的区别,不管什么代码,要操作一个图片,肯定是很浪费时间的,因为代码要去扫描每一个像素点,所以我们不可能再ui线程中去这么做,所以generate方法一般是在线程中去用,并等待返回结果;如何是在ui线程中,我们可以使用generateAsync方法,该方法的任何一个重载都有一个回调的参数,而且它的返回值是一个AsyncTask。好,开始看咱们的代码吧。12行,我们获取了一个Bitmap,这个没什么好说的,这个bitmap就是ImageView上显示的那个图片。14~23行是关键,可以看到,我们使用了Palette的静态方法generateAsync。第一个参数是一个Bitmap对象,正好,我们把12行获取的bitmap传给它,第二个参数是一个回调接口,在这个接口中有一个onGenerated方法,参数是一个Palette对象。这样曲折的一个过程,我们终于获取了Palette对象。如果,你看过文档,你会发现Palette提供了一系列的get方法,这里我们使用的是getDarkVibrantSwatch,该方法返回一个Swatch(色板)对象,然后我们就可以通过Swatch获取需要的颜色了。swatch,getRgb()返回的是该色板上的一个rbg颜色,swatch.getTitleTextColor()返回的android建议的一个用于任何标题的颜色,另外还有一个getBodyTextColor()返回的是android建议的一个用于任何body的颜色,哈,是不是很智能?代码很简单,但是实现的效果却是令人激动的,最后来看一下效果吧:
是不是根据图片的色调,动态的改变了TextView的色调。更多实用功能,还需要我们在日常开发中去挖掘,我们完全可以做一个美食的APP,文字介绍的颜色和该美食的图片的颜色相关
今天是个悲剧的一天,但不是有那么一句老话吗“塞翁失马,焉知非福”。先说说今天吧,
不知道咋回事,genymotion数据全丢失了,没办法,只能重新下载新的数据,就是在选择版本的过程中,突然发现了5.0, 好激动,赶快下载下来体验一把。
UI是不是特别爽,感觉可以秒杀iOS好几条街了,
好了,不扯淡了,进入今天的主题Palette。
Palette,中文名:调色板,也就是android允许我们动态的获取颜色,至于这些颜色怎么处理,就看你个人的爱好和需求了。
那么怎么获取颜色呢? 从哪获取颜色?
先来回答第二个问题,一般情况,我们是从图片抓取颜色,然后设置到该图片的介绍(文本颜色和背景颜色)。
这样做有什么好处? 可以保证图片和文字介绍在同一个色调上。是不是很爽?
再来看看第一个问题如何获取? 答案也很简单,就是我们今天要用的Palette。
依照惯例,先上代码,
哦,不对,上代码之前,还得说一下Palette怎么使用,好,找到你的android5 sdk的下来目录,依次定位到sdk\extras\android\support\v7\palette目录下,再打开libs目录,可以看到里面有一个android-support-v7-palette.jar文件,将这个文件copy到你项目的libs目录下,这样你的项目才可以使用Palette。
准备工作完成了,来看看具体实现代码吧。
先看看布局文件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.loader.palette.MainActivity"
>
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<<a href="http://code.662p.com/list/2943_1.html"
target="_blank" class="relatedlink" style="word-wrap: break-word; outline: none; color: rgb(51, 102, 153); border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: blue;">TextView
android:layout_below="@id/iv"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
/>
复制代码
很简单,一个ImageView和一个TextView,过会,我们就通过代码,根据ImageView上的图片的主色调来调整TextView的色调。
public class MainActivity
extends Activity {
private
ImageView mImageView;
private
TextView mTextView;
@Override
protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView
= (ImageView) findViewById(R.id.iv);
mTextView
= (TextView) findViewById(R.id.tv);
BitMap bmp
= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Palette.generateAsync(bmp,
new Palette.PaletteAsyncListener() {
@Override
public
void onGenerated(Palette palette) {
Palette.Swatch
swatch = palette.getVibrantSwatch();
if(null
!= swatch) {
mTextView.setBackgroundColor(swatch.getRgb());
mTextView.setTextColor(swatch.getTitleTextColor());
}
}
});
}
}
复制代码
在介绍代码之前,首先说一下Palette这个类,看一下文档,这个类并没有提供可用的构造方法,而且提供了一系列的静态generate和generateAsync方法,很好理解,就是生成的意思,来说说generate和generateAsync的区别,不管什么代码,要操作一个图片,肯定是很浪费时间的,因为代码要去扫描每一个像素点,所以我们不可能再ui线程中去这么做,所以generate方法一般是在线程中去用,并等待返回结果;如何是在ui线程中,我们可以使用generateAsync方法,该方法的任何一个重载都有一个回调的参数,而且它的返回值是一个AsyncTask。好,开始看咱们的代码吧。12行,我们获取了一个Bitmap,这个没什么好说的,这个bitmap就是ImageView上显示的那个图片。14~23行是关键,可以看到,我们使用了Palette的静态方法generateAsync。第一个参数是一个Bitmap对象,正好,我们把12行获取的bitmap传给它,第二个参数是一个回调接口,在这个接口中有一个onGenerated方法,参数是一个Palette对象。这样曲折的一个过程,我们终于获取了Palette对象。如果,你看过文档,你会发现Palette提供了一系列的get方法,这里我们使用的是getDarkVibrantSwatch,该方法返回一个Swatch(色板)对象,然后我们就可以通过Swatch获取需要的颜色了。swatch,getRgb()返回的是该色板上的一个rbg颜色,swatch.getTitleTextColor()返回的android建议的一个用于任何标题的颜色,另外还有一个getBodyTextColor()返回的是android建议的一个用于任何body的颜色,哈,是不是很智能?代码很简单,但是实现的效果却是令人激动的,最后来看一下效果吧:
是不是根据图片的色调,动态的改变了TextView的色调。更多实用功能,还需要我们在日常开发中去挖掘,我们完全可以做一个美食的APP,文字介绍的颜色和该美食的图片的颜色相关
相关文章推荐
- Android项目及编码的规范
- Android开发--圆角 Button 按钮 xml 实现
- Android源码编译选项eng、user、userdebug的区别
- Android开发--拍照选择照片裁剪
- Android 重复安装
- Android应用开发:CardView的使用及兼容
- Android实现ListView首行距离屏幕边缘距离
- android NullPointerException: println needs a message
- Android 界面ListView使用
- MAC中设置android adb环境变量
- Android中图片转化为bitmap
- 安卓常用adb命令
- android新技术学习(1)-2016年,这些Android技术会很火
- Android-带有切换动画的CheckBox
- 如何在mac本上安装android sdk
- 关于android 和 耗时操作的一点理解
- android中信息列表的下拉刷新和下拉加载
- Android开发优化之——使用软引用和弱引用
- Android5.0适配——水波纹点击效果
- Android中ListView下拉刷新的实现