在透明背景的视图中的海拔

时间:2015-08-29 12:47:32

标签: android android-5.0-lollipop

我有一个带有自定义背景的项目列表。背景是一个简单的形状,圆形 - 正方形可填充白色。所以我的观点类似于卡片。我可以设置它的高程,它的工作原理。它下面有一个阴影。

但我想优化它。我的窗口的背景是白色的,所以我认为我可以删除View的背景颜色以减少透支。但事情并非那么简单。只要我在视图的背景可绘制中将颜色设置为透明,高程就会停止工作并且不再绘制阴影。我试图在我的视图的bakcground drawable中使用笔触而不是纯色,但它也不起作用。这可能是因为ViewOutline。所以我创建了一个返回如下内容的自定义OutlineProvider

outline.drawRoundRect(0,0,view.getWidth(), view.getHeight(), someRadius); 

现在我的View具有透明背景,阴影也可见但是它有问题。它看起来不太好。在View的顶部,在它下方可以看到某种背景。下面是我输出的图片。左侧是具有透明背景和自定义OutlineProvider的视图。右边是一个不透明的白色背景视图。

enter image description here

这是一个错误吗?或者有另一种方法来实现这一目标吗?看起来这是一个非常简单的性能优化,但事实证明它比它应该复杂得多。

1 个答案:

答案 0 :(得分:8)

我认为这与Lollipop https://code.google.com/p/android/issues/detail?id=78248

中的已知问题有关
  

感谢报告和重复步骤 - 这确实是一个错误,而且它   刚刚被修复了一个内部分支。将在外部发布   在将来的版本中。

     

作为一种解决方法,您可以在GradientDrawable上设置alpha,   或者在投射阴影的视图上设置自定义轮廓提供者(通过   查看#setOutlineProvider)从背景中查询轮廓   覆盖drawable提供的alpha。

     

问题在于GradientDrawable过于保守   在具有透明填充的情况下报告0 alpha。 (看到   GradientDrawable#getOutline(),好奇的)