android 5.X之使用Palette

这几天为了学些android5.0版本sdk的新特性,折腾了好久。AndroidStudio被我反复的安装又卸载又安装,在eclipse和AndroidStudio

之间来回折腾。没想到sdk升级到5.0版本,竟然会出这么多的麻烦。一开始还想着继续用eclipse,但是被各种升级插件以及导包折磨的死去活来,

换成AndroidStudio,结果电脑总是卡成狗!我都无语死了,后来在百般折腾下,最终还是抛弃了eclipse,使用AndroidStuidio。现在还是

不很习惯AndroidStudio的操作。以后会慢慢习惯吧。

好了吐槽完毕。既然工具已经搞定了,就开始迫不及待的看看android 5.0X都新增了哪些新特性。今天就来说说我学习的第一个新特性,

即调色板Palette。因为这个Palette可以从一张Bitmap图片中提取你所需要的色调,这样子极大了方便开发者来保持app的颜色观和谐统一。

下面是我的收获和一个小的例子。

一、使用前的准备

首先需要在gradle中添加依赖。

即在你build.gradle的dependencies中添加appconat-v7和palette-v7的依赖。如下:

dependencies {

    compile ‘com.android.support:appcompat-v7:21.0.3‘    compile ‘com.android.support:palette-v7:21.+‘

}

二、关于Palette的使用API

首先是获取到一个Palette对象,有四种方式来获取,如下:

(一)Palette p = Palette.generate(bitmap);(二)Palette p = Palette.generate(bitmap, 24);(三)

Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {

    @Override

    public void onGenerated(Palette palette) {

    }

});

(四)

Palette.generateAsync(bitmap, 24, new Palette.PaletteAsyncListener() {

    public void onGenerated(Palette palette) {

    }

});

注:(1)前两种方法为同步获取,后两种方法为异步获取,使用哪一种都行。异步获取到的palette在

onGenerated方法的参数中。因此一般颜色设定的逻辑也在这个方法里。

(2)在获取Palette对象时,可以指定它的size。一般size越大获取需要的时间也就越长。不指定

时,默认的调色板大小,即size为16.

(3)size大小多少为合适呢?一般来说头像之类的设定,最好在24~32,风景大图之类的,一般在

8~16之间。

获取到Palette就该使用它了,即接着通过Palette对象获取到一个样本swatch,有6中样本,如下:

Palette.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();    //获取柔和的亮

最后我们就可以利用采集的色调样本swatch对象给需要的东西赋予颜色了,有如下几个方法:

getPopulation():    the amount of pixels which this swatch represents.

getRgb():    the RGB value of this color.

getHsl():    the HSL value of this color.

getBodyTextColor():   the RGB value of a text color which can be displayed on top of this color.

getTitleTextColor():   the RGB value of a text color which can be displayed on top of this color.

比如你的TextView有个背景图片,你可以使用Palette获取到这个背景图片的色调,然后利用getBodyTextColor

来给这个TextView的文字设定颜色,从而与背景图片比较相称!

三,一个小小的例子

用AndroidStudio新建一个项目,然后修改它的activity_main.xml代码。如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical">
 7
 8     <TextView
 9         android:id="@+id/mytext_view"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content"
12         android:textSize="30sp"
13         android:text="Hello World!" />
14     <Button
15         android:id="@+id/btn"
16         android:layout_width="match_parent"
17         android:layout_height="50dp"
18         android:background="@drawable/palette"
19         android:text="我是按钮"/>
20 </LinearLayout>

很简单,放置了一个TextView和一个按钮,且给按钮设置了一个背景图片。下面我要做的就是从

这张背景图片上提取色调来给整个布局赋予颜色。修改MainActivity的代码如下:

 1 package kun.fuly.myapplication;
 2
 3 import android.annotation.TargetApi;
 4 import android.graphics.Bitmap;
 5 import android.graphics.BitmapFactory;
 6 import android.graphics.drawable.ColorDrawable;
 7 import android.os.Build;
 8 import android.os.Bundle;
 9 import android.support.v7.app.ActionBarActivity;
10 import android.support.v7.graphics.Palette;
11 import android.widget.Button;
12 import android.widget.TextView;
13
14
15
16 public class MainActivity extends ActionBarActivity {
17
18     private Bitmap bmp;
19     private TextView myText;
20     private Button btn;
21
22
23     @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26         setContentView(R.layout.activity_main);
27
28         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.palette);
29
30         myText = (TextView) findViewById(R.id.mytext_view);
31
32         btn = (Button) findViewById(R.id.btn);
33
34         Palette p = Palette.generate(bmp );
35
36         Palette.Swatch s = p.getVibrantSwatch();
37
38         //给TextView设置背景颜色和文本颜色
39         myText.setBackground(new ColorDrawable(s.getRgb()));
40
41         myText.setTextColor(s.getBodyTextColor());
42
43         //为按钮的文本设置颜色
44         btn.setTextColor(s.getBodyTextColor());
45
46
47         //为actionbar设置颜色
48         getSupportActionBar().setBackgroundDrawable(new ColorDrawable(s.getRgb()));
49     }
50
51
52 }

代码很简单,没什么好解释的。运行,效果如下:

好吧,看起来还是很丑,不过颜色还算是和谐。相信Palette在你的手里一定能运用的非常漂亮。其他的就不再说了,

关于Palette的介绍到此为止。

时间: 2024-08-03 04:14:22

android 5.X之使用Palette的相关文章

Android好奇宝宝_10_RecyclerView+CardView+Palette

这几天被ListView搞得有点烦,听说官方出了个新控件来替换它,于是顺带另外两个5.0版本的新东西写了个Demo. 先上效果图: (1)RecyclerView RecyclerView就是官方用来替代ListView的,其实同时也可以替代GridView,上面第二幅图的编码实现只跟第一幅差了一行代码而已. RecyclerView一般需要两个东西搭配使用,LayoutManager和Adapter,比ListView和GridView(后面简称LG组合)多了一个LayoutManager.其

Android5.0特性

一.了解Material Design 1.概念:融合卡片式,立体式,拟物化的设计风格 2.详情:查看 http://design.1sters.com 3.官网链接:http://developer.android.com/training/material/theme.html 二.替换Theme MaterialTheme颜色设置:http://www.materialpalette.com/red/deep-purple 1.setTheme方法必须要在setContentView或者s

Android5.0新特性——图片和颜色(drawable)

图片和颜色 tint属性 tint属性一个颜色值,可以对图片做颜色渲染,我们可以给view的背景设置tint色值,给ImageView的图片设置tint色值,也可以给任意Drawable或者NinePatchDrawable设置tint色值. 在应用的主题中也可以通过设置 android:tint 来给主题设置统一的颜色渲染. tint的渲染模式有总共有16种,xml文件中可以使用6种,代码中我们可以设置16种,渲染模式决定了渲染颜色和原图颜色的取舍和合成规则: PorterDuff.Mode.

android 5.0 -- Palette

Palette用来从图片资源中获取颜色内容. 下面是个对颜色值使用的工具类: public class PaletteUtils { public static int getColorWithDefault(Palette palette, int defaultColor) { Palette.Swatch currentItem = null; if (currentItem == null) { //充满活力的颜色 currentItem = palette.getVibrantSwat

android L Palette 实现原理

有时候,看到一些界面上的色彩,心情可能会很舒畅,有时候,看到一些其他色彩,就觉得很讨厌,不爽,看到android L Palette 从图片中提取筛选出来的颜色,觉得都挺好看的,就去了解了下Palette调色板. 看了代码,根据我的理解,大概说说主要的步骤: 第一步,将图片缩小,再整个过程中,可以降低计算量和减少内存的使用,跟不缩小也能达到一样的效果 /** * Scale the bitmap down so that it's smallest dimension is * {@value

Android L中的RecyclerView 、CardView 、Palette的使用

<Material Design>提到,Android L版本中新增了RecyclerView.CardView .Palette.RecyclerView.CardView为用于显示复杂视图的新增Widget.Palette作为调色板类,可以让你从图像中提取突出的颜色. RecyclerView RecyclerView作为替代ListView使用,RecyclerView标准化了ViewHolder,ListView中convertView是复用的,在RecyclerView中,是把Vie

Android Lollipop 新特性 - Palette;获取图片颜色

Android Lollipop 新特性 - Palette 在Android 5.0 之后推出的palette,通过这个方法,我们就可以从一张 bitmap 中提取我们需要的颜色,可以使UI风格更加美观融洽.比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化. Palette可以提取的颜色如下: Vibrant (有活力的) Vibrant dark(有活力的 暗色) Vibrant light(有活力的 亮色) Mute

Android Lollipop 新特性 - Palette

Palette 可以从一张图片中提取颜色,我们可以把提取的颜色融入到App UI中,可以使UI风格更加美观融洽.比如,我们可以从图片中提取颜色设置给ActionBar做背景颜色,这样ActionBar的颜色就会随着显示图片的变化而变化. Palette可以提取的颜色如下: Vibrant (有活力的) Vibrant dark(有活力的 暗色) Vibrant light(有活力的 亮色) Muted (柔和的) Muted dark(柔和的 暗色) Muted light(柔和的 亮色) 使用

Android 5.x--使用Material Theme加Palette

Android5.0较之以前的版本,有一个比较大的改变:在Android5.x中支持Material Design的主题风格,这对于视觉上将是一个重大的改变.新的主题风格给人的感觉眼前一亮,原来Android也可以这么美,相信通过不断完善,Android也将越来越强大.那么今天就介绍一下,如何使用这让人眼前一亮的主题吧. 开始使用 目前只有在Android5.0之上的版本才可以支持Material的主题风格,这样我们首先在res/values-v21/styles.xml文件中定义使用Mater