Android 自定义view《八》 橡皮擦效果实现刮刮卡效果实现 Colorfilter、setXfermode,Shader,bitmapShader,PorterDuffXfermod

一.ColorMatrix

Android中的色彩矩阵

色彩矩阵对于色彩的存储,Bitmap类使用一个32位的数值来保存。红、绿、蓝及透明度各占8位,每一个色彩分量的取值范围是0-255。透明度为0表示完全透明,为255时,色彩完全可见。

使用方法:paint的函数

paint.setColorFilter(new ColorMatrixColorFilter(mSaturationMatrix));// 设置颜色变换效果

 

ColorMatrix函数

setSaturation——设置饱和度

setScale——色彩缩放

setRotate——色彩旋转

应用:相机软件中会有各种滤镜效果,这些滤镜效果大部分就是通过更改ColorMatrics矩阵来完成的

 

 

二.setColorFilter

也是用来处理图片的效果的

PorterDuffColorFilter

 

这个叫PorterDuff颜色滤镜,也叫图形混合滤镜;其名称是Tomas Proter和Tom Duff两个人名的缩写,他们提出的图形混合的概念极大地推动了图形图像学的发展。 

这个颜色滤镜的声明如下:

public PorterDuffColorFilter(int srcColor, PorterDuff.Mode mode)

--------------------- 

mPaint.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY));//

 

setXfermode

这个函数是图像混合里最难的一个了,它的功能也是相当强大的,这个模式叫做图形混合模式。 
与setColorFilter一样,派生自Xfermode的有三个类:

禁用硬件加速:

使用离屏绘制

 

mPaint.setXfermode(new AvoidXfermode(Color.WHITE,100, AvoidXfermode.Mode.TARGET));

 

选区

这一点与Photoshop是类似的,就是以白色为目标色,容差为100找到对应的选区; 

容差是以颜色差异为基础的,任何两个颜色之间的颜色差异是从0-255的范围内的。具体两个颜色之间的差异的的数值为多少是需要靠公式来计算的:《维基百科:颜色差异》 

而容差的概念就是指与目标色所能容忍的最大颜色差异,所以容差越大,所覆盖的颜色区域就越大;所以当容差为0时,就表示只选择与目标色一模一样的颜色区域;当容差为100时,就表示与目标色值的颜色差异在100范围内的都是可以的;而由于最大的颜色差异是255,所以当我们的容差是255时,所有的颜色都将被选中; 

我们使用Photoshop来演示下: 

在Photoshop中,有个魔棒工具,它有一个容差的参数,默认是0;指的是只与目标色一致的颜色。我们分别看下当容差为100和容差为255的区域选择范围:

--------------------- 

在上面的公式中涉及到一个概念,目标图DST,源图SRC。那什么是源图,什么是目标图呢?

 

 

我们讲过PorterDuff.Mode表示混合模式,枚举值有18个,表示各种图形混合模式,有:

18中模式

Mode.CLEAR

Mode.SRC

Mode.DST

Mode.SRC_OVER

Mode.DST_OVER

Mode.SRC_IN

Mode.DST_IN

Mode.SRC_OUT

Mode.DST_OUT

Mode.SRC_ATOP

Mode.DST_ATOP

Mode.XOR

Mode.DARKEN

Mode.LIGHTEN

Mode.MULTIPLY

Mode.SCREEN

Mode.OVERLAY

Mode.ADD

 

Mode.SRC_IN

SRC_IN模式是在相交时利用目标图像的透明度来改变源图像的透明度和饱和度

示例1:图形圆角用的就是Mode.SRC_IN模式

示例2:图片倒影

 

Mode.SRC_OUT

橡皮擦效果

使用:setXfermode,PorterDuffXfermode,18种模式

canvas.drawBitmap(BmpDST,0,0,mBitPaint);
mBitPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

 

这节我们将学到如下内容:

  • 传统地给按钮添加阴影的方法
  • 如何给已有控件添加阴影
  • 如何给图片添加阴影
  • 2种方式的比较,优缺点

 

一、layerlist给按钮添加阴影效果、

二、Paint.setShadowLayer实现阴影效果

 

案例:

1.录音悬浮窗的阴影效果

2.换机精灵的光影效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值