天天看点

android paint XfermodeXfermode

Xfermode

使用非常简单,就是paint.setXfermode

但是网上有些代码是不对的。

先说PorteDuffXfermode

先引用一张图片

android paint XfermodeXfermode

先说思路:

1. 画Dst

2. 设置xFermode

3. 画Src

4. 设置xFermode = null

网上一般都是这个代码

但是

这代码亲测是不行的,最终效果很难看懂,少了个东西: 图层

说说我的思路

1. 获得图层 = canvas.saveLayer(…);

2. 画Dst

3. 设置xFermode

4. 画Src

5. 设置xFermode = null

6. restoreToCount(…)

这样就能出现应有的效果了

ok,看看我的代码

int sc = canvas.saveLayer(, ,  + width,  + height, null,
                        Canvas.MATRIX_SAVE_FLAG |
                                Canvas.CLIP_SAVE_FLAG |
                                Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
                                Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
                                Canvas.CLIP_TO_LAYER_SAVE_FLAG);

//        canvas.translate(x, y);
        canvas.drawBitmap(backBitmap, , , upPaint);
        upPaint.setXfermode(sModes[]);
        canvas.drawBitmap(upBitmap, , , upPaint);
        upPaint.setXfermode(null);
        canvas.restoreToCount(sc);
           

基本上是从ApiDemo中copy出来的

所以,还是要多看看apiDemo

至于其他的xFermode下次再说