自定义View(6)paint设置两个图层相交时的显示方式,包含清空canvas
1.问题
在已有的图层上绘图将会在其上面添加一层新的图层。 如果新的图层是完全不透明的,那么它将完全遮挡住下面的图层,而setXfermode就可以来解决这个问题。这个函数设置两个图层相交时的模式 .
2.示例
1 Canvas canvas = new Canvas(bitmap1); 2 3 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 4 5 canvas.drawBitmap(mask, 0f, 0f, paint);
其中PorterDuffXfermode有很多样式,下面是各种样式效果图。
3.PorterDuffXfermode的各个值的含义
PorterDuff.Mode.CLEAR | 清除画布上图像 |
PorterDuff.Mode.SRC | 显示上层图像 |
PorterDuff.Mode.DST | 显示下层图像 |
PorterDuff.Mode.SRC_OVER | 上下层图像都显示,上层居上显示 |
PorterDuff.Mode.DST_OVER | 上下层都显示,下层居上显示 |
PorterDuff.Mode.SRC_IN | 取两层图像交集部门,只显示上层图像 |
PorterDuff.Mode.DST_IN | 取两层图像交集部门,只显示下层图像 |
PorterDuff.Mode.SRC_OUT | 取上层图像非交集部门 |
PorterDuff.Mode.DST_OUT | 取下层图像非交集部门 |
PorterDuff.Mode.SRC_ATOP | 取下层图像非交集部门与上层图像交集部门 |
PorterDuff.Mode.DST_ATOP | 取上层图像非交集部门与下层图像交集部门 |
PorterDuff.Mode.XOR | 取两层图像的非交集部门 |
4.清除画布内容的方法
4.1 方法1
1 canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
4.2 方法2
1 Paint paint = new Paint(); 2 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 3 canvas.drawPaint(paint); 4 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
分类:
Android 自定义view
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?