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 开发中,执行上述代码,浮雕效果不生效
问题原因
从 Android 3.0(API 级别 11)开始,Android 2D 渲染管道支持硬件加速,也就是说,在 View 的画布上执行的所有绘制操作都会使用 GPU
如果目标 API 级别为 14 及更高级别,则硬件加速默认处于启用状态
- 详见官方文档:
https://developer.android.google.cn/topic/performance/hardware-accel?hl=zh-cn
- EmbossMaskFilter 与 BlurMaskFilter 在硬件加速下会被忽略,导致没有任何视觉效果
处理策略
- 关闭 TextView 的硬件加速
tvContent.setLayerType(View.LAYER_TYPE_SOFTWARE,null);