自定义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));  

 

转载于:https://www.cnblogs.com/sjjg/p/5040183.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值