Compose Graphics 是一份面向 Android Jetpack Compose 的高级视觉实现指南,聚焦于超越基础动画的图形表现能力。
用途与定位 该技能在已有 compose-motion 基础之上,提供更进阶的视觉实现规则,并说明具体适用触发条件(如着色器、Expressive、M3 Expressive、AGSL、Canvas、全息效果等关键词)。基础部分由 ../compose-motion/SKILL.md 覆盖,本文档只保留简明规则,深度内容放在 references/ 中。它给出一棵决策树,帮助开发者按需求选定 API:需要弹簧物理回弹/过冲时使用 MotionScheme.expressive();需要像素级着色器时使用 RuntimeShader 配合 Modifier.graphicsLayer 的 renderEffect;需要生成式绘图(路径、粒子、分形)时使用 Canvas 与 DrawScope;需要 GPU 效果(模糊、阴影、颜色滤镜)时使用 graphicsLayer 或 Modifier.blur;需要自适应系统材质时使用 MaterialTheme.colorScheme.surfaceContainerHighest。
主要能力 文档分为三大领域。第一是 Material 3 Expressive,介绍 2025 年 Material 3 演进中基于弹簧的运动物理、通过 androidx.graphics.shapes 实现的形状变形 API,以及可在主题上选择的 MotionScheme。它列出 standard() 与 expressive() 两种方案的性格与适用场景,并给出 fastSpatialSpec、defaultSpatialSpec、slowSpatialSpec、fastEffectsSpec、defaultEffectsSpec、slowEffectsSpec 等 token 的对应领域与时长区间,区分空间(位置/尺寸)与效果(透明度/颜色)两类动画。还提供英雄卡片展开示例、弹簧调参配方(英雄揭示、活泼、平静、临界阻尼)以及形状变形代码片段。 第二是 AGSL 着色器(Android 13+),介绍 AGSL 作为 Android 着色器语言的特性(类似 GLSL 但使用 half4、功能受限、沙箱安全),RuntimeShader 的编译与通过 graphicsLayer 绑定到 Compose 修饰符的方法,并反复强调需对 Build.VERSION.SDK_INT >= 33 做门控并提供回退。文档给出触摸涟漪、全息渐变、液态玻璃/玻璃拟态三个可运行配方(含 AGSL 源码与 Compose 绑定代码),并在性能说明中提示每个 RuntimeShader 是一次渲染通道、image.eval 采样成本、Android 12 及以下需优雅降级、优先使用单个精心设计的着色器而非串联多个。 第三是 Canvas / DrawScope,列出 drawCircle、drawRect、drawPath、drawArc、drawLine、drawText、drawIntoCanvas 等方法的用途,并提供动画正弦波、50 粒子系统、生成式流场(提及 references/canvas-generative.md 深入)等配方。性能注意事项包括用 derivedStateOf 收敛重绘、用 withFrameMillis 维持 60fps 而避免 delay(16) 漂移、预计算路径、以及每帧绘制量的参考阈值。
使用方式 文档以技能文件形式存在,通过关键词加载。使用时按决策树选择 API,参考对应领域章节的代码片段,深入内容加载 references/agsl-recipes.md(7 个可运行着色器及绑定代码)、references/m3-expressive-deep.md、references/canvas-generative.md,基础动画与跨平台模式分别参见 ../compose-motion/SKILL.md 与 ../compose-multiplatform/SKILL.md。
适用场景 适合需要英雄时刻动效、关键交互、FAB 与主 CTA 的界面,需要像素级着色器效果(涟漪、全息、玻璃拟态)的场景,以及生成式绘图(粒子、流场)等高性能视觉实现。文档建议 Expressive 只占 UI 的 1-3%,其余保持 standard。
限制 AGSL 着色器仅支持 Android 13 及以上,低版本需回退且绝不应硬崩溃;Android 目前没有类似 iOS 的原生液态玻璃 API,需自行用模糊加色差加边缘着色组合实现;Expressive 过度使用会导致界面混乱;多着色器串联与每帧分配对象属于反模式。文中未提供收费、价格或平台发布相关信息。