Android布局中有图片和颜色,图片和颜色

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

图片和颜色

tint属性tint属性一个颜色值,可以对图片做颜色渲染,我们可以给view的背景设置tint色值,给ImageView的图片设置tint色值,也可以给任意Drawable或者NinePatchDrawable设置tint色值。

在应用的主题中也可以通过设置 android:tint 来给主题设置统一的颜色渲染。

tint的渲染模式有总共有16种,xml文件中可以使用6种,代码中我们可以设置16种,渲染模式决定了渲染颜色和原图颜色的取舍和合成规则:PorterDuff.Mode.CLEAR 所绘制不会提交到画布上。

PorterDuff.Mode.SRC 显示上层绘制图片

PorterDuff.Mode.DST 显示下层绘制图片

PorterDuff.Mode.SRC_OVER 正常绘制显示,上下层绘制叠盖。

PorterDuff.Mode.DST_OVER 上下层都显示。下层居上显示。

PorterDuff.Mode.SRC_IN 取两层绘制交集。显示上层。

PorterDuff.Mode.DST_IN 取两层绘制交集。显示下层。

PorterDuff.Mode.SRC_OUT 取上层绘制非交集部分。

PorterDuff.Mode.DST_OUT 取下层绘制非交集部分。

PorterDuff.Mode.SRC_ATOP 取下层非交集部分与上层交集部分

PorterDuff.Mode.DST_ATOP 取上层非交集部分与下层交集部分

PorterDuff.Mode.XOR 取两层绘制非交集。两层绘制非交集。

PorterDuff.Mode.DARKEN 上下层都显示。变暗

PorterDuff.Mode.LIGHTEN 上下层都显示。变亮

PorterDuff.Mode.MULTIPLY 取两层绘制交集

PorterDuff.Mode.SCREEN 上下层都显示。

通过tint色处理的图片会原图显示出不一样的颜色,我们可以通过这种方式利用一张图片做出图片选择器的效果,让控件在按压状态下显示另外一种颜色:

通过给图片设置tint色生成另外一种图片

android:src="@drawable/ring"

android:tintMode="multiply"

android:tint="#5677fc" >

Palette调色版Palette调色板,可以很方便的让我们从图片中提取颜色。并且可以指定提取某种类型的颜色。Vibrant 鲜艳的

Vibrant dark鲜艳的暗色

Vibrant light鲜艳的亮色

Muted 柔和的

Muted dark柔和的暗色

Muted light柔和的亮色对图片取色是一个比较消耗性能的操作,其内部会对图片的像素值进来遍历以分析对比,所以我们要在异步线程中去完成。//如果操作本来就属于后台线程,可以使用:

Palette p = Palette.generate(Bitmap bitmap);

//如果在主线程中,我们可以使用异步的方式:

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

public void onGenerated(Palette palette) { }

});当操作完成后或者异步回调后,我们就可以使用以下方式来获取对应的色值了,并且可以在没有获取到的情况下之指定默认值:p.getVibrantColor(int defaultColor);

p.getDarkVibrantColor(int defaultColor);

p.getLightVibrantColor(int defaultColor);

p.getMutedColor(int defaultColor);

p.getDarkMutedColor(int defaultColor);

p.getLightMutedColor(int defaultColor);在使用palette之前,bitmap提供获取指定位置的像素值: bitmap.getPixel(x,y)

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

vector矢量图矢量图也称为面向对象的图像或绘图图像,是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示图像。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。

Android L开始支持矢量图,我们可以用它来处理一些图形简单的icon,方便我们的适配。

Android L中对矢量图的支持是通过xml文件构建,通过矢量图的path描述来生成一个矢量图,对应的java对象为VectorDrawable。

下面是官方文档提供的一个矢量图,利用改文件,我们可以创建一个随意放大缩小都不会失真的心形

android:height="300dp"

android:width="300dp"

android:viewportHeight="40"

android:viewportWidth="40">

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

矢量图的pathData数据就是用来描述矢量图的数学公式,其含义如下表:命令类型使用描述代表含义举例说明移动指令M x,yM移动绝对位置M 100,240

移动指令m x,ym移动相对于上一个点m 100,240

绘制指令L 或 l从当前点绘制直线到指定点L 100,100

绘制指令H 或 h水平直线h 100

绘制指令V 或 v垂直直线v 100

绘制指令C 或 c三次方程式贝塞尔曲线C 100,200 200,400 300,200

绘制指令Q 或 q二次方程式贝塞尔曲线Q 100,200 300,200

绘制指令S 或 s平滑三次方程式贝塞尔曲线S 100,200 200,400 300,200

绘制指令T 或 t平滑二次方程式贝塞尔曲线T 100,200 300,200

绘制指令A 或 a椭圆A 5,5 0 0 1 10,10

关闭指令Z 或 z将图形的首、尾点用直线连接Z

填充规则F0EvenOdd 填充规则

填充规则F1Nonzero 填充规则通过path命令来进行简单的图形还是可行的,但是复杂的图形我们就需要借助工具来生成了,比如使用 Expression Design,就可以直接粘贴来自其它软件的矢量图形,然后选择导出,导出时做如后选择:文件->导出->导出属性->格式->XAML Silverlight 画布,即可得到XAML格式的矢量图形,也就是Path。

更多矢量图学习可参考:http://www.w3.org/TR/SVG11/paths.html#PathData 我们可以访问http://editor.method.ac在线制作矢量图并导出path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值