当用到canvas画图且有2层及以上的图层时,往往会用到PorterDuff.Mode,怎么使用的呢?
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
先来看下PorterDuffXfermode这个类,PorterDuff查词典是没这个名字的,看了大神的文章才知道原来这个是Tomas Proter和 Tom Duff名字组合,在SDK中Xfermode有三个子类:AvoidXfermode, PixelXorXfermode和PorterDuffXfermode,前两个类在API 16被遗弃了。
PorterDuff.Mode这个枚举总共有18种,如图:
下图大概比较简易的描述了这些mode的作用,
从上面我们可以看到PorterDuff.Mode为枚举类,一共有18个枚举值:
1.PorterDuff.Mode.CLEAR
所绘制不会提交到画布上。
2.PorterDuff.Mode.SRC
显示上层绘制图片
3.PorterDuff.Mode.DST
显示下层绘制图片
4.PorterDuff.Mode.SRC_OVER
正常绘制显示,上下层绘制叠盖。
5.PorterDuff.Mode.DST_OVER
上下层都显示。下层居上显示。
6.PorterDuff.Mode.SRC_IN
取两层绘制交集。显示上层。
7.PorterDuff.Mode.DST_IN
取两层绘制交集。显示下层。
8.PorterDuff.Mode.SRC_OUT
取上层绘制非交集部分。
9.PorterDuff.Mode.DST_OUT
取下层绘制非交集部分。
10.PorterDuff.Mode.SRC_ATOP
取下层非交集部分与上层交集部分
11.PorterDuff.Mode.DST_ATOP
取上层非交集部分与下层交集部分
12.PorterDuff.Mode.XOR
异或:去除两图层交集部分
13.PorterDuff.Mode.DARKEN
取两图层全部区域,交集部分颜色加深
14.PorterDuff.Mode.LIGHTEN
取两图层全部,点亮交集部分颜色
15.PorterDuff.Mode.MULTIPLY
取两图层交集部分叠加后颜色
16.PorterDuff.Mode.SCREEN
取两图层全部区域,交集部分变为透明色
17.PorterDuff.Mode.ADD
取两图层全部区域,饱和度叠加
18.PorterDuff.Mode.OVERLAY
今天又进步了