android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用

81 篇文章 3 订阅

转自点击打开链接

Android绘图开发中,Paint.setXfermode()和Canvas.saveLayer()是两个重要的方法了。很多网友都不是很明白,我也一直不明白,花了几天时间来研究了这两个方法,略有领悟,记录下来,归纳总结,也给新手一点帮助。 
Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解 
这篇文章给了我很大的帮助,大家看这篇文章应该就可以明白,我把我在学习的过程中遇到的问题说清楚。 
Paint.setXfermode() 
设置两张图片相交时的模式,好像说有18中模式,每种模式的规则都不一样,这也没什么好说的。 
在设置Paint.setXfermode()之前Canvas上的内容就是DST,不管Canvas是透明的还是颜色,或者是已经画了一个图,反正这个Canvas就算作DST了,Paint.setXfermode()之后画的就是SRC了,Paint.setXfermode()就是设置DST和SRC相交区域混合模式。不错,是相交区域,Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解 上面说的很清楚了,我们不要被这张图迷惑了 
android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用 
官方的这张图也是为了让我们更好的理解。 
这时我们看下Canvas.saveLayer()这个方法,它的作用是生成一个新的层,这个层是透明的,之后的所有drawxx的方法都是在这个层上进行的,可能一些新手要问了,我们为什么要在这个新层上画了,直接在Canvas上画不好吗,大家想下,当我们在Canvas上画了很多东西以后,我们之后画的新图是不是直接在之前的画板作画,这样不就会影响画出的图形吗。但是使用Canvas.saveLayer()就不一样了,他完全是个全新的画板,上面是透明的,我们可以任意的设置颜色和画任何的图形,而对之前的Canvas不会造成任何影响,最后我们使用restoreToCount()将新的层与底下的Canvas相结合就形成一个完整的图像。 
我们反过来看Paint.setXfermode()这个方法,如果没有Canvas.saveLayer()方法的调用,我们使用Paint.setXfermode()这个方法就是把当前的Canvas上的内容当做DST,如果我们在调用Canvas.saveLayer()方法之后,就把当前的层上的内容作为DST了,这个时候大家应该就知道了为什么在设置Paint.setXfermode()的时候,要在Canvas.saveLayer()和Canvas.restoreToCount()之间使用了,就是为了不影响底下Canvas已经画好的图,Canvas.restoreToCount()调用之后,两个层叠起来就是整个View上的图像了,这跟Photoshop上的层,差不多了。希望对大家有帮助!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值