我有一个具有自定义背景的项目列表。背景是一个简单的形状,带有填充白色的圆角矩形绘图。所以我的观点类似于卡片。我可以在它上面设置一个高度并且它可以工作。它的下面有一个影子。
但我想优化它。我的窗口背景是白色的,所以我想我可以删除View的背景颜色来减少过度绘制。但事情没那么简单。一旦我在视图的背景可绘制中将颜色设置为透明,标高就会停止工作,并且不再绘制阴影。我尝试在视图的 bakcground 可绘制对象中使用描边而不是纯色,但它也不起作用。这可能是因为一个ViewOutline
。所以我创建了一个自定义OutlineProvider
返回类似这样的内容:
outline.drawRoundRect(0,0,view.getWidth(), view.getHeight(), someRadius);
Now my View
背景透明,阴影也可见,但有问题。看起来不太好。在顶部View
它下面有某种可见的背景。下面是我的输出的图片。左边是一个具有透明背景的视图和一个自定义的 OutlineProvider。右侧是不透明白色背景的视图。
这是一个错误吗?或者还有其他方法可以实现这一目标吗?看起来这是一个非常简单的性能优化,但事实证明它比应有的要复杂得多。
我相信这与 Lollipop 中的一个已知问题有关https://code.google.com/p/android/issues/detail?id=78248
感谢您的报告和重现步骤 - 这确实是一个错误,而且它
刚刚在内部分支中修复。将对外发布
在未来的版本中。
作为解决方法,您可以在 GradientDrawable 上设置 alpha,
或在投射阴影的视图上设置自定义轮廓提供程序(通过
View#setOutlineProvider) 从后台查询轮廓并
覆盖可绘制对象提供的 alpha。
问题是 GradientDrawable 在以下方面过于保守
在具有透明填充的情况下报告 0 alpha。 (看
GradientDrawable#getOutline(),出于好奇)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)