在了解 PorterDuffXferMode的用法之前,我们可以先看一张图片。出自API Demo,基本上所有讲PorterDuffXferMode 的文章都会使用这张图做说明。如下图所示:
这张图列举了16中PorterDuffXferMode的模式,这也就介绍了 PorterDufferXferMode的基本功能: 控制的是两个图像之间的混合显示模式。
dst 是先画的图形 src是后画的图形
说一下使用的方法: 一般我们在调用canvas.drawXXX() 方法都会传入一个画笔Paint对象,Android在绘图时会先检查该画笔Paint对象没有设置Xfermode,那么直接的图形覆盖Canvas对应位置原有的像素;如果设置了Xfermode,那么按照XferMode具体的规则来更新Canvas中对应位置的像素颜色。他的算法在源码中..
可以看一个实例来了解一下 该东西的用法
效果图:
画这个圆环的思路是: 先根据每个颜色的比例来画一个充满的圆弧,此时没有设置paint.setXfermode() 方法的,所以他是一个圆 只是有三种不同的圆弧组成。
再设置paint.setXfermode(new PorterDufferXfermode(mode.DST_OUT));
这个时候 再画一个内部圆 :
canvas.drawCircle(center,center,inRadius,paint);
这个时候图像之间的混合了 并且模式是DST_OUT 所以相同的部分去掉 就达到这样的效果
int st =canvas.saveLayer(rectF,paint);
……………………………….
canvas.restoreToCount(st);
这两句话很重要 一般没有这两句话使用PorterDufferXfermode()可能胡出现不同的结果
这两句画的意思是: 比如再ps上新建一个图层,最后那句话是将以前的图层与现在的图层合并在一起。
加了这两句话 代表我们的操作是在一个新的图层上进行的。