如何使用Android S新增的RenderEffect库实现View模糊效果?
基于RenderEffect实现View模糊效果的具体步骤
RenderEffect是Android 12(API 31,即Android S)新增的渲染特效API,仅支持Android 12及以上系统,低于该版本的设备需要单独做兼容处理。
1. 配置项目SDK版本
首先修改模块级build.gradle配置,确保编译SDK和目标SDK版本不低于31:
android { compileSdk 31 defaultConfig { targetSdk 31 // 其他配置保持不变 } }
2. 给目标View添加模糊效果
在需要触发模糊的逻辑处,添加如下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { // 模糊半径,单位为像素,数值越大模糊效果越强,建议控制在25px以内避免过高性能开销 val blurRadiusX = 15f val blurRadiusY = 15f // 构建模糊特效 val blurEffect = RenderEffect.createBlurEffect( blurRadiusX, blurRadiusY, Shader.TileMode.CLAMP ) // 给View设置特效 targetView.setRenderEffect(blurEffect) } else { // 低版本兼容逻辑可自行实现,比如采用RenderScript、FastBlur等替代方案 }
3. 移除模糊效果
如果需要取消View的模糊,直接给setRenderEffect传null即可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { targetView.setRenderEffect(null) }
额外注意点
- 该API仅在开启硬件加速的View上生效,默认Android项目的View都是开启硬件加速的,若你手动关闭了需要重新开启
- 如果只需要模糊View的背景、不需要模糊View上的文字/子控件,可以先将背景Drawable转为Bitmap,通过
RenderEffect.createBitmapEffect结合模糊效果单独处理背景 - 模糊半径设置过大会导致渲染性能大幅下降,非特殊需求不要设置超过25px的半径
内容的提问来源于stack exchange,提问作者Narendra_Nath
相关产品推荐
相关产品推荐

