如何为canvas绘制的元素添加材质风格的阴影?

mal*_*lte 5 android canvas shadow material-design android-elevation

正如文档所述,您可以通过添加和自定义材料设计阴影样式android:elevation. This works fine with all elements I came across yet.

但是,如果我想为在 上绘制的形状获得相同(或几乎相同)的行为,该怎么办Canvas?- 目前我正在玩Paint.setShadowLayer(), but the results are far from 'material'-style compared with the native implementation.

有没有任何库或方法可以达到相同的效果?最好添加海拔高度?

Zie*_*ony 4

Android Lollipop 用于渲染阴影的方法非常简单:

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

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

编辑:链接到Android阴影绘制代码: https://github.com/android/platform_frameworks_base/blob/4d9ffdf95237c4ee59514c678fea6ff157e0eee3/libs/hwui/OpenGLRenderer.cpp#L2507