Android5.0之Palette简单实用

一直想学学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。

准备工作完成了,来看看具体实现代码吧。

先看看布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="org.loader.palette.MainActivity" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <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" />

</RelativeLayout>

很简单,一个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,文字介绍的颜色和该美食的图片的颜色相关,这样用户体验将更好。

时间: 2024-10-21 06:42:04

Android5.0之Palette简单实用的相关文章

bootstrap-datetimepicker 时间控件的简单实用

1.引包 <link rel="stylesheet" href="../lib/css/conmon.css"> <link rel="stylesheet" href="../lib/css/bootstrap.min.css"> <link rel="stylesheet" href="../lib/bootstrap-datetimepicker/bootst

小米S2手机刷android5.0

小米2S MIUI6 android5.0系统 想装一个原声的android5.0系统.... 于是,惨痛的一天就开始了.... 一:小米系统自带的系统更新直接安装ROM的zip包 我下载了一个又一个的ROM包..都告诉我不能用!! 无论是直接在系统选择,还是改名成update.zip从recovery中进.... 二:猜测原因需要第三方recovery,官方recovery只能更新MIUI相关的官方ROM 那就换个第三方recovery把,然而..这个万恶的recovery啊!!! 1,刷第三

Json.Net的介绍与简单实用(兼容2.0/3.0/3.5/4.5/RT)

本文的前提是你已经熟悉Json,如果您还不知道什么是Json是什么,请自行查看维基百科. 一.Json.Net是什么? Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据类型 等)和Json的转换. 二.为什么使用Json.Net? 我们知道在.Net中内置了读写Json

最新 AFNetworking 3.0 简单实用封装

AFNetworking 3.0 的到来使我们开发者又方便了许多,话不多说,直接上代码. 1.首先 引入框架AFNetworking框架 GitHub下载地址:https://github.com/AFNetworking/AFNetworking AFNetworking官网地址:http://afnetworking.com 2.导入AFNetworking 支持框架 #import<MobileCoreServices/MobileCoreServices.h> #import<S

Android5.0 ListView特效的简单实现

Android5.0中对于动画可所谓是情有独钟,在设计规范中大量展现了listview的动画,其实也就是一个目的:将items动画显示出来.这个看起来很炫的效果,其实实现也蛮简单的,我下面就来用动画简单实现一下. 一.在xml文件中建立动画文件 这一步我推荐在xml中写动画,好处是你整个应用都可以调用这一种效果,保证了风格而且减少冗余.对于动画我一贯的态度是:简单的动画用xml文件,复杂的动画用ObjectAnimation. <?xml version="1.0" encodi

一个Activity掌握Android5.0新控件 (转)

原文地址:http://blog.csdn.net/lavor_zl/article/details/51279386 谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常用的新控件有下面5种. 1. CardView(卡片视图) CardView顾名思义是卡片视图,它继承FrameLayout.它是一个带圆角的背景和阴影FrameLayout.CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为容器使用. Ca

Android5.0系统的优缺点

Android L(5.0)正式定名为 Lollipop(棒棒糖).安卓已经六岁了,也总算有一次重大改观了.安卓5.0 Lollipop带来了全新的,扁平化的外观,更好的通知中心,重新设计的核心应用,并提升了在安卓设备上的性能表现--增加了一些以前所缺失的重要应用类别. 首先来看一下Android L相比之前的版本有什么新鲜的东西. 原文博客请参考:点击打开链接 一:自定义通知中心 Lollipop为用户带来了对通知中心前所未有的控制性,每一个应用程序都可以在通知中心进行单独的设置,并且只有在用

Android5.0 新特性学习总结

参考文章: 极客学院 –Material Design 中文版图文教程 几行代码,让你的 APP 变得花俏-Android Design Support Library 代码实验 material design 的android开源代码整理 低版本android上实现Material design应用 Android5.0版本,推出了Material Design的概念,这是在设计上Android的又一大突破.对应的程序实现上就有如 Theme.Material.Light. Theme.Mat

Android5.0新控件

谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常用的新控件有下面5种.  1. CardView(卡片视图) CardView顾名思义是卡片视图,它继承FrameLayout.它是一个带圆角的背景和阴影FrameLayout.CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为容器使用. CardView的使用非常简单: 1 <android.support.v7.widget.CardView 2 andr