Android 开发问题:EmbossMaskFilter 浮雕效果不生效

📅 2026/7/7 18:41:02 👁️ 阅读次数 📝 编程学习
Android 开发问题:EmbossMaskFilter 浮雕效果不生效
SpannableStringspannableString=newSpannableString("Hello Android");float[]direction={0f,1f,1f};// 光照方向EmbossMaskFilterembossMaskFilter=newEmbossMaskFilter(direction,0.6f,6f,10f);spannableString.setSpan(newMaskFilterSpan(embossMaskFilter),0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);TextViewtvContent=findViewById(R.id.tv_content);tvContent.setTextSize(TypedValue.COMPLEX_UNIT_SP,30);tvContent.setText(spannableString);
  • 在 Android 开发中,执行上述代码,浮雕效果不生效
问题原因
  1. 从 Android 3.0(API 级别 11)开始,Android 2D 渲染管道支持硬件加速,也就是说,在 View 的画布上执行的所有绘制操作都会使用 GPU

  2. 如果目标 API 级别为 14 及更高级别,则硬件加速默认处于启用状态

  • 详见官方文档:https://developer.android.google.cn/topic/performance/hardware-accel?hl=zh-cn
  1. EmbossMaskFilter 与 BlurMaskFilter 在硬件加速下会被忽略,导致没有任何视觉效果
处理策略
  • 关闭 TextView 的硬件加速
tvContent.setLayerType(View.LAYER_TYPE_SOFTWARE,null);