多种混合模式
PorterDuffXfermode的构造函数: /**
* Create an xfermode that uses the specified porter-duff mode.
*
* [@param](https://my.oschina.net/u/2303379) mode The porter-duff mode that is applied
*/
public PorterDuffXfermode(PorterDuff.Mode mode) {
this.mode = mode;
native_instance = nativeCreateXfermode(mode.nativeInt);
}
参数传入了PorterDuff.Mode mode,以下列出PorterDuff的所以的Mode。可以看到源码里面用一个枚举来表示 // these value must match their native equivalents. See SkXfermode.h
public enum Mode {
/** [0, 0] 所绘制不会提交到画布上。*/
CLEAR (0), //
/** [Sa, Sc] 显示上层绘制图片*/
SRC (1),
/** [Da, Dc] 显示下层绘制图片 */
DST (2),
/** [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] 正常绘制显示,上下层绘制叠盖。*/
SRC_OVER (3),
/** [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc] 上下层都显示。下层居上显示。*/
DST_OVER (4),
/** [Sa * Da, Sc * Da] 取两层绘制交集。显示上层 */
SRC_IN (5),
/** [Sa * Da, Sa * Dc] 取两层绘制交集。显示下层。*/
DST_IN (6),
/** [Sa * (1 - Da), Sc * (1 - Da)] 取上层绘制非交集部分。*/
SRC_OUT (7),
/** [Da * (1 - Sa), Dc * (1 - Sa)] 取下层绘制非交集部分。*/
DST_OUT (8),
/** [Da, Sc * Da + (1 - Sa) * Dc] 取下层非交集部分与上层交集部分*/
SRC_ATOP (9),
/** [Sa, Sa * Dc + Sc * (1 - Da)] 取上层非交集部分与下层交集部分*/
DST_ATOP (10),
/** [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] */
XOR (11),
/** [Sa + Da - Sa*Da,
Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)] */
DARKEN (16),
/** [Sa + Da - Sa*Da,
Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)] */
LIGHTEN (17),
/** [Sa * Da, Sc * Dc] */
MULTIPLY (13),
/** [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] */
SCREEN (14),
/** Saturate(S + D) */
ADD (12),
OVERLAY (15);
Mode(int nativeInt) {
this.nativeInt = nativeInt;
}
/**
* [@hide](https://my.oschina.net/u/1429664)
*/
public final int nativeInt;
}
对应官方示意图