Android Compose 图层的合成 : BlendMode

1. 图形的合成是什么 ?

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

1.1 初始界面

kotlin 复制代码
@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会把组件内容绘制到独立图层,变换 / 动画只重绘图层,不触发重组,也不影响父布局测量。

kotlin 复制代码
@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 离屏缓冲

相关推荐
树码小子4 小时前
开启 IDEA 中的断言功能
android·java·intellij-idea
Android-Flutter5 小时前
android 动画详解
android·kotlin
小孔龙10 小时前
GraphicBuffer 跨进程共享
android
行业研究员11 小时前
Android内置GPS与腾讯地图定位技术对比分析
android·android定位·腾讯地图定位
Android-Flutter12 小时前
android WMS 详解(二)
android·kotlin
游戏开发爱好者812 小时前
App Store 上传 IPA 自动化,.p8 密钥认证与 CI/CD 接入实战
android·运维·ci/cd·小程序·uni-app·自动化·iphone
游戏开发爱好者814 小时前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
阿pin14 小时前
Android随笔-kotlin 高阶函数
android·kotlin·高阶函数
wxson72821 天前
【Android视频监控系统技术总结】
android·音视频