Android自定义View(四)混合模式PorterDuffXfermode

1.PorterDuffXfermode

1.1 介绍

PorterDuffXfermode有点类似数学中的交集,并集,用来两个图像间的混合显示模式,设置的是两个图层交集区域的显示方式,dst是下层,先画的图形;src是上层,后画的图形。

1.2 构造方法

PorterDuffXfermode(PorterDuff.Mode mode);

构造方法中只需一个参数,PorterDuff.ModeModePorterDuff这个类中的一个枚举类,共有18个枚举值。

2. 18种模式

模式效果
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去除两层的交集区域
PorterDuff.Mode.DARKEN取两层全部区域,交集区域变暗
PorterDuff.Mode.LIGHTEN取两层全部区域,交集区域变亮
PorterDuff.Mode.MULTIPLY取下层全部区域,交集区域色彩叠加,正片叠底
PorterDuff.Mode.SCREEN取两层全部区域,交集区域变透明
PorterDuff.Mode.ADD饱和度叠加
PorterDuff.Mode.OVERLAY对黑白无效,显示两层颜色中和后的中间色

3.PorterDuff.Mode.CLEAR实践

1.先画一个黄色的圆

        paint.setColor(0xFFFFCC44);
        int r = width / 3;
        canvas.drawCircle(r,r,r,paint);

2.再画一个矩形,并设置PorterDuffXfermode为CLEAR

        paint.setColor(0xFF66AAFF);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        canvas.drawRect(r, r, r * 2.7f, r * 2.7f, paint);
        paint.setXfermode(null);

3. 一定要注意 ,一定要注意,一定要注意,此模式不支持硬件加速,需关闭

        setLayerType(View.LAYER_TYPE_SOFTWARE, null);

3. 简单圆形图片实践

1.先绘制下层圆形

canvas.drawCircle(getWidth() / 2,getHeight() / 2,Math.min(getWidth(),getHeight()) / 2,paint);

2.绘制图片,并设置过渡模式为:SRC_IN,将交集显示在下层绘制的区域

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.img);
        canvas.drawBitmap(bitmap,0,0,paint);
        paint.setXfermode(null);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值