tint,Palette,vector的使用和认识

1,tint属性

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

通过tint色处理的图片会与原图显示出不一样的颜色,可以通过这种方式利用一张图片做出图片选择器的效果(selector),让图片在按压状态下显示另一种颜色。

android:tint="@color/green"
android:tintMode="multiply"

使用了tint来设置选择器,那么apk的大小可以减小一倍,因为以前本来需要两张图来实现选择器,现在只需要一张图就可以实现了。

2,Palette调色板

Palette调色板,可以很方便的从图片中提取颜色,并且可以提取某种类型的颜色。

1,vibrant 鲜艳的
2,vibrant dark 鲜艳的暗色
3,vibrant light 鲜艳的亮色
4,muted 柔和的
5,muted dark 柔和的暗色
6,muted light 柔和的亮色

对图片取色是一个比较消耗性能的操作,其内部会对图片的像素值进行遍历分析对比,所以,要在异步线程中去完成。

如果操作本来就属于后台线程,可以使用:
    Palette p=Palette.generate(Bitmap bitmap);
    如果在主线程中,需要使用异步的方式:
    Palette.generateAsync(bitmap,new Palette.PaletteAsyncLinstener(){
                        public void onGenerated(Palette palette){ }
    });

当操作完成后,或者异步回调后,就可以使用一下方式来获取对应的色值了,并且可以在没有获取到的情况下指定默认值:

p.getVibrantColor(int default);
p.getDarkVibrantColor(int default);
p.getLightVibrantColor(int default);
p.getMutedColor(int default);
p.getDarkMutedColor(int default);
p.getLightMutedColor(int default);

在使用palette之前,bitmap提供获取指定位置的像素值。

bitmap.getPixel(x,y);

但是,该方式,只能获取某一个点的像素值,palette是对整个bitmap的所有像素值进行分析,并选出几个像素占比比较多的像素值,这样选择出来的色值更符合图片的整体色值。

3,vector矢量图

矢量图也成为面向对象的图像或绘图图像,是计算机图形学中国用点、线、或者多边形等基于数学方程的集合图元表示图像。
矢量图形最大的有点是无论放大、缩小或者旋转等都不会失真;
最大的缺点是难以表现色彩层次城府的逼真图像效果。
android L开始支持矢量图,可以用来处理一些简单的icon,更方便适配。
android L中对矢量图的支持是通过xml文件构建,通过矢量图的path描述来生成一个矢量图,对应的Java对象为VectorDrawable。
看一个官方提供的矢量图,可以创建一个随意放大缩小都不会失真的心形。

 <?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="300dp"
    android:height="300dp"
    android:viewportWidth="40"
    android:viewportHeight="40">

    <!--<path
        android:fillColor="#ff00ff"
        android:pathData="M20.5,9.5
                            c-1.955,0,-3.83,1.268,-4.5,3
                            c-0.67,-1.732,-2.547,-3,-4.5,-3
                            c8.957,9.5,7,11.432,7,14
                            c0,3.53,3.793,6.257,9,11.5
                            c5.207,-5.242,9,-7.97,9,-11.5
                            c25,11.432,23.043,9.5,20.5,9.5" />-->
    <path
        android:fillColor="#ff00ff"
        android:pathData="M20.5,9.5
    c-1.955,0,-3.83,1.268,-4.5,3
    c-0.67,-1.732,-2.547,-3,-4.5,-3
    C8.957,9.5,7,11.432,7,14
    c0,3.53,3.793,6.257,9,11.5
    c5.207,-5.242,9,-7.97,9,-11.5
    C25,11.432,23.043,9.5,20.5,9.5z"/>


</vector>

效果图
矢量图
as

一般来说,这个path值,是美工来生成的,每一个美工都是懂得生成矢量图的,开发中,只需要让美工画好矢量图,然后将path值复制过来就OK了。

自动生成矢量图的工具网址:http://editor.method.ac/

本篇博客是参考下面的文章而写的,特此著明,尊重版权。
参考文章:material Design

猜你喜欢

转载自blog.csdn.net/jakezhang1990/article/details/79501008