Android Compose 图层的合成 : BlendMode

1. 图形的合成是什么 ?

Compose中,图层的合成,通过BlendMode来控制 “显示谁、保留哪部分”,常用于裁剪、遮罩、图层叠加。

1.1 初始界面

@Preview
@Composable
fun MyBlendModeTest() {
    Box {
        Box(
            Modifier
                .size(100.dp)
                .background(Color.Red, CircleShape)
        )
        Box(Modifier
            .padding(start = 30.dp, top = 30.dp)
            .size(100.dp)
            .background(Color.Blue, CircleShape))
    }
}

默认的显示效果
在这里插入图片描述

1.2 Modifier.graphicsLayer

Modifier.graphicsLayer会把组件内容绘制到独立图层,变换 / 动画只重绘图层,不触发重组,也不影响父布局测量。

@Preview
@Composable
fun MyBlendModeTest() {
    Box {
        Box(
            Modifier
                .size(100.dp)
                .background(Color.Red, CircleShape)
        )
        Box(Modifier
            .graphicsLayer(blendMode = ...)
            .padding(start = 30.dp, top = 30.dp)
            .size(100.dp)
            .background(Color.Blue, CircleShape))
    }
}

2. BlendMode : 图层的合成

2.1 BlendMode.SrcOver

graphicsLayer的blendMode的默认值是BlendMode.SrcOver,和不加graphicsLayer的效果一样,叠加在上面。
在这里插入图片描述

在图形绘制的概念里
source : 源图形 = 蓝色圆
destination : 目标图形 = 背景 + 红色圆

2.2 BlendMode.DstOver

目标在上、源在下;目标透明处显源。
在这里插入图片描述

2.3 BlendMode.Src

仅显示源图,完全覆盖目标。
在这里插入图片描述

2.4 BlendMode.Dst

仅显示目标图,丢弃源图。
在这里插入图片描述

2.5 BlendMode.SrcIn

仅保留重叠部分,且只显示源图内容(常用作遮罩)
在这里插入图片描述

2.6 BlendMode.DstIn

仅保留重叠部分,且只显示目标图内容
在这里插入图片描述

2.7 BlendMode.SrcOut

仅保留源图非重叠部分,重叠区透明。
在这里插入图片描述

2.8 BlendMode.DstOut

仅保留目标非重叠部分,重叠区透明。
在这里插入图片描述

2.9 BlendMode.SrcAtop

在这里插入图片描述

2.10 BlendMode.DstAtop

显示源全貌,重叠区用目标图。
在这里插入图片描述

2.11 BlendMode.Xor

重叠区透明,非重叠区保留各自
在这里插入图片描述

2.12 BlendMode.Clear

清除重叠区域,变透明。
在这里插入图片描述

3. BlendMode : 颜色混合

除了图像的合成,还支持颜色的混合。可以基于源与目标的RGB 通道做色彩运算,用于滤镜、特效、艺术合成。
这里介绍其中几个。

3.1 BlendMode.Plus

把源和目标的颜色通道直接相加
在这里插入图片描述

3.2 BlendMode.Modulate

只乘颜色通道,不乘 Alpha
在这里插入图片描述

3.3 BlendMode.Screen

反色相乘 → 再反色(变亮模式)
在这里插入图片描述

3.4 BlendMode.Overlay

根据底色自动选择 Multiply 或 Screen
在这里插入图片描述

3.5 BlendMode.Darken

每个通道取更暗的那个
在这里插入图片描述

3.6 BlendMode.Lighten

每个通道取更亮的那个
在这里插入图片描述

3.7 BlendMode.Hue

只用源的色相,保留目标的饱和度 + 亮度
在这里插入图片描述

4. 离屏缓冲

详见我的另一篇博文Android Compose 离屏缓冲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值