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

 

posted @ 2015-12-11 20:47  f9q  阅读(836)  评论(0编辑  收藏  举报