在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使用及工作原理详解 上面说的很清楚了,我们不要被这张图迷惑了

官方的这张图也是为了让我们更好的理解。
这时我们看下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上的层,差不多了。希望对大家有帮助!!!

更多相关文章

  1. Android(安卓)EditText的使用
  2. android学习五(android中基本控件的使用)
  3. Android(安卓)进阶 教你打造 Android(安卓)中的 IOC 框架 【View
  4. (android)如何破解多盟广告sdk (一)
  5. 浅谈Java中Collections.sort对List排序的两种方法
  6. 箭头函数的基础使用
  7. NPM 和webpack 的基础使用
  8. Python list sort方法的具体使用
  9. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程

随机推荐

  1. Android点击通知栏返回正在运行的Activit
  2. Android与(Servlet)服务器交互
  3. Android(安卓)实现Activity后台运行
  4. Android(安卓)同个TextView设置字体大小
  5. Android(安卓)HTTP GET/POST
  6. Android: Bluetooth profile list for 2.
  7. Android(安卓)系统操作
  8. android屏蔽home键
  9. android语音识别和语音播报相关资料总结
  10. Android(安卓)点击按钮,文字改变颜色