BitmapShader
使用paint.setShader()可以给画笔设置着色器。
BitmapShader(Bitmap bitmap, Shader.TileMode tileX, Shader.TileMode tileY)
tileX和tileY分别是瓦片模式,即x和y轴方向上的像素如果不够铺满宽或高,那么使用什么样的方式补齐。
- TileMode.CLAMP 拉伸,使用边缘像素补齐
- TileMode.REPEAT 重复,复用原像素序列补齐
- TileMode.MIRROR 镜像,和重复模式类似,只不过将像素序列反转后补齐,如果反转的像素序列也用完了,再反转回来继续补齐,以此类推
PorterDuffXfermode
val xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_IN)
paint.setXfermode(xfermode)
给画笔设置XFermode。如果该坐标原来就有色值,那么通过XFermode可以叠加图层。有SRC和DST两个概念,SRC代表source原图,DST代表destination目的地。简单说,就是在绘制之前该位置就有的像素叫作DST,当下绘制的像素叫作SRC。或者我们把DST叫作下面的图层,而SRC叫作上面的图层。
PorterDuff.Mode的类型如下:
- PorterDuff.Mode.CLEAR:SRC和DST图层都清除
- 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_ATOP:交集部分取上层的色彩,和下层非交集部分的图像
- PorterDuff.Mode.DST_ATOP:交集部分取下层的色彩,和上层非交集部分的图像
- PorterDuff.Mode.SRC_OUT:取上层非交集部分,交集部分透明,相当于使用下层图像的裁掉上层一部分
- PorterDuff.Mode.XOR:取上下层非交集部分,交集部分透明
- PorterDuff.Mode.DARKEN:取上下层全部区域,交集部分颜色变暗
- PorterDuff.Mode.LIGHTEN:取上下层全部区域,交集部分颜色变亮
- PorterDuff.Mode.MULTIPLY:取上下层交集部分,交集部分颜色叠加
- PorterDuff.Mode.SCREEN:取上下层全部区域,交集部分滤色
- PorterDuff.Mode.ADD:取上下层全部区域,交集部分饱和度叠加
- PorterDuff.Mode.OVERLAY:取上下层全部区域,交集部分颜色叠加