如何将 material 样式的阴影添加到 canvas 绘制的元素?

How to add material-style shadow to canvas drawn elements?

如文档所述,您可以通过 android:elevation 添加和自定义 material 设计阴影样式。这适用于我遇到的所有元素。

但是如果我想获得与我在 Canvas 上绘制的形状相同(或几乎相同)的行为怎么办? - 目前我正在使用 Paint.setShadowLayer(),但与本机实现相比,结果远非 'material' 风格。

是否有任何库或方法可以达到相同的效果?最好通过添加海拔级别?

棒棒糖使用渲染阴影的方法Android非常简单:

  • 绘制黑色的视图形状
  • 使用 ScriptIntrisincBlur 对其进行模糊处理
  • 将其绘制在视图下方

您可以将此方法应用于您的形状。我已经在我的库中实施了这些步骤,能够在所有最近的 Android 上绘制实时阴影,直至纸杯蛋糕。您可以在这里找到它:https://github.com/ZieIony/Carbon/blob/master/carbon/src/main/java/carbon/widget/FrameLayout.java#L207

编辑:link 至 Android 阴影绘图代码: https://github.com/android/platform_frameworks_base/blob/4d9ffdf95237c4ee59514c678fea6ff157e0eee3/libs/hwui/OpenGLRenderer.cpp#L2507