Compose 调用 - 液态玻璃 Backdrop

GitHub

官网教程

一、概念

模糊+液态玻璃效果。

|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| rememberLayerBackdrop() | @Composable fun rememberLayerBackdrop( graphicsLayer: GraphicsLayer = rememberGraphicsLayer(), onDraw: ContentDrawScope.() -> Unit = DefaultOnDraw ): LayerBackdrop 创建状态。onDraw 的绘制会画到设置玻璃效果的组件背景上。 |
| layerBackdrop() | fun Modifier.layerBackdrop(backdrop: LayerBackdrop): Modifier 标记背景来源。 |
| drawBackdrop() | fun Modifier.drawBackdrop( backdrop: Backdrop, shape: () -> Shape, //形状 effects: BackdropEffectScope.() -> Unit, //玻璃效果 highlight: (() -> Highlight?)? = DefaultHighlight, //高光 shadow: (() -> Shadow?)? = DefaultShadow, //外阴影 innerShadow: (() -> InnerShadow?)? = null, //内阴影 layerBlock: (GraphicsLayerScope.() -> Unit)? = null, exportedBackdrop: LayerBackdrop? = null, onDrawBehind: (DrawScope.() -> Unit)? = null, //在下层额外绘制 onDrawBackdrop: DrawScope.(drawBackdrop: DrawScope.() -> Unit) -> Unit = DefaultOnDrawBackdrop, //在背景来源层额外绘制 onDrawSurface: (DrawScope.() -> Unit)? = null, //在Surface层额外绘制 onDrawFront: (DrawScope.() -> Unit)? = null //在上层额外绘制 ): Modifier 设置玻璃效果。底层绘制的顺序由低到高:onDrawBehind → onDrawBackdrop → onDrawSurface → drawContent → onDrawFront。 |

二、添加依赖

Kotlin 复制代码
[versions]
composeBackdrop = "2.0.0-rc01"
[libraries]
compose-backdrop = { module = "io.github.kyant0:backdrop", version.ref = "composeBackdrop" }

三、简单使用

Kotlin 复制代码
Box {
    // 创建状态
    val backdrop = rememberLayerBackdrop()
    // 标记背景板
    ScreenContent(Modifier.layerBackdrop(backdrop))
    // 设置玻璃效果
    FloatWidget(
        modifier = Modifier.drawBackdrop(
            backdrop = backdrop,
            shape = { RoundedCornerShape(10.dp) },
            effects = {
                lens(
                    refractionHeight = 5.dp.toPx(),   //折射范围
                    refractionAmount = 15.dp.toPx()    //折射程度
                )
            }
        )
    )
}

四、高级效果 BackdropEffectScope

|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| lens() | fun BackdropEffectScope.lens( //折射范围(边缘向内的长度)。 @FloatRange(from = 0.0) refractionHeight: Float, //折射程度。 @FloatRange(from = 0.0) refractionAmount: Float, //边缘折射加强,默认关。 depthEffect: Boolean = false, //边缘彩虹色散,默认关 chromaticAberration: Boolean = false ) 透镜。 |
| blur() | fun BackdropEffectScope.blur( @FloatRange(from = 0.0) radius: Float, edgeTreatment: TileMode = TileMode.Clamp ) 模糊程度。 |
| opacity() | fun BackdropEffectScope.opacity(@FloatRange(from = 0.0, to = 1.0) alpha: Float) 边缘折射程度,默认1F,取值范围:0 ~ 1F。 |
| colorControls() | fun BackdropEffectScope.colorControls( brightness: Float = 0f, //亮度 contrast: Float = 1f, //对比度 saturation: Float = 1f //饱和度 ) 色彩调节。 |
| vibrancy() | fun BackdropEffectScope.vibrancy() 高饱和度效果(底层通过颜色滤镜实现)。 |
| colorFilter() | fun BackdropEffectScope.colorFilter(colorFilter: ColorFilter) 颜色滤镜。 |

Kotlin 复制代码
Modifier.drawBackdrop(
    backdrop = backdrop,
    shape = { RoundedCornerShape(10.dp) },
    effects = {
        vibrancy()    //增加饱和度
        opacity(0.9F)   // 边缘折射程度,默认1F,范围:0~1F
        blur(1.dp.toPx())  // 模糊程度
        lens(
            refractionHeight = 5.dp.toPx(),    //折射范围(边缘向内的长度)
            refractionAmount = 15.dp.toPx(),    //折射程度
            depthEffect = true,     //边缘折射加强,默认关
            chromaticAberration = true  //边缘彩虹色散,默认关
        )
    }
)
相关推荐
警醒与鞭策4 小时前
【无标题】
android·unity·性能优化·游戏引擎·perforce
传奇开心果编程5 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
李游Leo8 小时前
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》07:异常恢复、状态机与CrossDrop工程收尾【鸿蒙心迹】
android·harmonyos
方白羽11 小时前
Android APK安全防护
android·安全·apk
小黄人软件11 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张11 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊11 小时前
cocos联调注意事项-安卓
android
TDengine (老段)11 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技12 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
硫酸锌0113 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python