Xfermode
使用非常简单,就是paint.setXfermode
但是网上有些代码是不对的。
先说PorteDuffXfermode
先引用一张图片
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyM1cTN0MTN5EDMxEDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
先说思路:
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下次再说