描述
在图层混合中,我们会用到PorterDuffXfermode 这个类,但是这个类中需要传入PorterDuff.Mode,这个东西到地是什么都有哪些效果呢?官方的demo 给出的效果图如下:
image.png
解释和用法
//禁止硬件加速
setLayerType(View.LAYER_TYPE_SOFTWARE,null);
//离屏绘制
int layerId = canvas.saveLayer(0,0,getWidth(),getHeight(),mPaint,Canvas.ALL_SAVE_FLAG);
canvas.drawBitmap(createRectBitMap(width,height),0,0,mPaint);
//设置图层混合模式,效果作用于src 源图像区域
//PorterDuff.Mode.CLEAR :两个图层都不显示
//PorterDuff.Mode.SRC :显示上层绘制的图像
//PorterDuff.Mode.DST :显示下层绘制的图像
//PorterDuff.Mode.SRC_OVER :上下层都显示,上下层绘制叠盖
//PorterDuff.Mode.DST_OVER :上下层都显示 下层居上显示
//PorterDuff.Mode.DST_OVER :上下层都显示 下层居上显示
//PorterDuff.Mode.SRC_IN :取两层绘制交集,显示上层
//PorterDuff.Mode.DST_IN :取两层绘制交集,显示下层
//PorterDuff.Mode.SRC_OUT :取上层绘制非交集部分,交集部分透明
//PorterDuff.Mode.SRC_ATOP :取上层交集部分,下层非交集部分,交集部分是上层的颜色
//PorterDuff.Mode.DST_ATOP :取下层交集部分,上层非交集部分。交集部分为下层颜色
//PorterDuff.Mode.XOR :取两图层非交集部分,交集部分是透明的
//PorterDuff.Mode.DARKEN :取两图层全部区域,交集部分颜色加深。
//PorterDuff.Mode.LIGHTEN :取两图层全部区域,交集部分颜色点亮。
//PorterDuff.Mode.MULTIPLY :取两图层交集部分,交集部分颜色叠加。
//PorterDuff.Mode.SCREEN :取两图层全部区域,交集部分滤色。
//PorterDuff.Mode.ADD :取两图层全部区域,交集部分饱和度相加
//PorterDuff.Mode.OVERLAY :取两图层全部区域,交集部分叠加。
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawBitmap(createCircleBitMap(width,height),0,0,mPaint);
mPaint.setXfermode(null);
canvas.restoreToCount(layerId);
网友评论