更新记录

1.0.0(2024-10-05) 下载此版本

  • 初次发布

平台兼容性

uni-app x(5.23)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ 6.0 13 5.0.0 ×

文档

sn-e-blurview 是 SinleUI 框架的高斯模糊组件。

SinleUI 框架实现高斯模糊/毛玻璃效果的组件都依赖此插件。

一、实现机制(按平台/引擎/版本条件编译)

场景 实现
非 APP 端(Web / iOS 等) 直接使用 CSS backdrop-filter: blur(radius)
Android · 非蒸汽模式(VDOM) com.eightbitlab:blurview + RenderScriptBlur,逐帧抓取 decorView 做模糊
Android · 蒸汽模式(Vapor),uniVersion < 5.25 不写任何原生代码,仅提供普通 view(退化为普通容器)
Android · 蒸汽模式(Vapor),uniVersion >= 5.25 直接使用 CSS backdrop-filter: blur(radius)

判定依据:组件通过 #ifdef APP-ANDROID、#ifndef/#ifdef VUE3-VAPOR 与版本条件编译 uniVersion 组合,在编译期确定采用哪条实现,运行时零开销。 blur-radius 默认值为 15(radius prop,单位 px)。

二、为什么这样设计

1. 优先使用 CSS backdrop-filter(最轻量、零依赖、跨端一致)

  • uni-app x 中非 APP 端、以及蒸汽模式 5.25 起均已原生支持 backdrop-filter。
  • 支持时就只渲染一个带插槽的普通 view 并在样式中声明模糊,用起来和普通 view 一样,无任何第三方依赖、无需自定义基座。

2. 蒸汽模式 uniVersion < 5.25 退化为普通 view,而非原生方案

  • 早期 vapor 尚不支持 backdrop-filter。
  • 但若在 vapor 下强行使用 com.eightbitlab:blurview,三库会用它自己的软件 Canvas 对 decorView 逐帧采样,而 vapor 的内容是硬件 RenderNode, 软件画布无法执行 Canvas.drawRenderNode(...),会直接抛 Software rendering doesn't support drawRenderNode 并导致 App 崩溃(实测)。
  • 因此在 vapor <5.25 时不引入原生代码,仅提供普通 view,把「是否补充毛玻璃」交由使用方在业务层自行权衡(例如用半透明遮罩临时代替),避免任何崩溃风险。

3. 仅 VDOM 非蒸汽模式使用原生 blurview

  • VDOM 的视图树可被该库的软件采样兼容,是历史上验证过能正常工作的路径,故保留 blurview + RenderScriptBlur 实现真实毛玻璃。

4. 版本可平滑演进

  • 升级到 HBuilderX Alpha 5.25+ 后,同一份代码会自动切换到 CSS backdrop-filter,无需改动任何业务使用方式。

注意:Android 上只有「VDOM 非蒸汽」分支依赖 com.eightbitlab:blurview,该分支运行需满足该依赖,故支持此分支的工程需打包自定义基座。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议