android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
来源:互联网 发布:中小企业网络搭建 编辑:程序博客网 时间:2024/05/16 15:25
转自点击打开链接
在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上的层,差不多了。希望对大家有帮助!!!
- android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
- android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
- android绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- android绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- android绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- android绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- android中绘图Paint.setAntiAlias()和Paint.setDither()方法的作用
- android Paint之setXfermode方法
- android Paint之setXfermode方法
- android Paint之setXfermode方法
- android Paint之setXfermode方法
- android Paint setXfermode()方法讲解
- android绘图canvas.clipRect()方法的作用
- android绘图canvas.drawBitmap方法的作用
- Android绘图篇-01 Canvas和Paint的基础使用
- Android绘图Canvas、Paint
- Android Canvas,Paint 绘图
- Android绘图基础之: Canvas 和 Paint
- 【Android-Emulator】Android模拟器介绍和基本使用
- 用android studio写个ping的程序(二)
- 阿里云服务器支持ipv6(苹果app审核不通过问题)
- (ing)一周一誌临时(2017-4月-2017-5月)
- 从传统SQL语句平稳过渡到Linq
- android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
- RxSwift(3.4.1)- Transforming Operators
- Android 下 编写自己第一个NDK Demo
- 获取对端IP,端口信息
- eclipse的java classpath variables没有显示
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
- mybatis学习之一
- Android中SQLite的基本使用(二)
- 按照官方文档启动不了tensorboard的解决办法