简书链接:理解PorterDuffXferMode从从理解什么叫源什么叫目标开始
文章字数:737,阅读全文大约需要2分钟

源和目标到底是意思?我语文没学好??

脑壳里面有一种思维,就是认定是这个理,特么就是很难改过来,就好比你认为男人是女人女人是男人的时候,我特么就疯了,这颠覆我的逻辑了,就是绕不过来。

就混淆了,src dest ,从图上看好像看不太懂,谁是被操作者,谁是操作者?

src 是操作者,从源地址服务器发送到 目标地址服务器

用源图片和目标图片进行杂交,目标地址在那个位置,源图片到达了那个位置,
源图片 是盖在目标上面的。 如果你认为 目标图片改在源图片上的,那么 xferMode的图片就似乎看不懂了。。

所以我觉得吧,我就是那种容易被混淆概念的人,我就是绕不过来,我觉得应该把src叫着topview, dest叫bottom view,一个在底部 一个在上面 覆盖在底部。。
概念纠正过来之后为了避免以后不被混淆概念,我决定用相近英语来记住它source file -> destop桌子,桌面 ,源文件放到了桌面上,桌面不可能放到源文件上,所以源文件在上面而,dest是类似背景,

ok不被混淆概念之后做起来其实超级简单的,因为你所理解的和效果图是一模一样了,你和参考教材的答案一样了,不再怀疑人生,也就不再害怕不理解PorterDuffXferMode 没错,我曾经就是害怕的,因为我不理解src到底是上面还是下面,谁是被操作者,谁是操作者

好了,再看看图,露露代码也没啥难度了

![PorterDuffXfermode`](https://upload-images.jianshu.io/upload_images/2815884-9756cfdd622f19dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

测试相交 xor, xor 其实也叫亦或 就是同性相斥异性相吸。挖空的地方就是被吸走了。合体不见了。

1
2
3
4
5
6
//destop bg
canvas.drawRect(20,20,80,80,mDstPaint);
mSrcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR));
//src file
canvas.drawCircle(30,30,30,mSrcPaint);

其他的代码走链接.纠正了观念以后看图就知道做效果了,
https://blog.csdn.net/wingichoy/article/details/50534175
https://blog.csdn.net/fz_dev/article/details/51489481