Xfermode一共有三个子类AvoidXfermode,PixelXorXfermode及PorterDuffXfermode。
不支持硬件加速,已过时。构造方法如下:public AvoidXfermode(int opColor, int tolerance, Mode mode)。第一参数是目标颜色值,第二个是容差,第三个是模式(AvoidXfermode.MODE.AVOID和AvoidXfermode.MODE.TARGET)。它的主要作用可以概括为:根据模式,在目标颜色值上画或者不画Paint.setColor()为Paint设置的颜色值。
MODE.TARGET:目标。与opColor相差在tolerance内的颜色上会被画上Paint的颜色值。
MODE.AVOID:避免。tolerance的意义也和TARGET不一样。tolerance为0时,那和opColor有一点相似都不会被画上Paint的颜色;tolerance为255时,只要和opColor有一点不一样,那就会被画上Paint的颜色值。
它是Xfermode子类之一。在使用Paint.setXfermode()时,传入的参数经常是PorterDuffXfermode的对象。如下:
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX));
PorterDuff.Mode有十六个值,分别代表不同的效果,应根据需要传入到PorterDuffXfermode()的构造器中。具体作用分别是(src指前景、上层,后绘制上的;dst指后景、下层,先绘制上去的):
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:同时显示上下两层,且相交部分颜色为透明色。
具体效果为: