Xfermode入门

基础

        Xfermode一共有三个子类AvoidXfermode,PixelXorXfermode及PorterDuffXfermode。

AvoidXfermode

        不支持硬件加速,已过时。构造方法如下: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的颜色值。

PorterDuffXfermode

        它是Xfermode子类之一。在使用Paint.setXfermode()时,传入的参数经常是PorterDuffXfermode的对象。如下:

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX));

PorterDuff.Mode

        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:同时显示上下两层,且相交部分颜色为透明色。

具体效果为:

Xfermode入门_第1张图片


你可能感兴趣的:(Xfermode入门)