【发布时间】:2015-11-24 00:16:16
【问题描述】:
我有一个带有自定义背景的项目列表。背景是一个简单的形状,带有填充白色的圆角矩形可绘制对象。所以我的观点类似于卡片。我可以在上面设置一个高度,它可以工作。它下面有一个影子。
但我想优化它。我的窗口的背景是白色的,所以我认为我可以删除 View 的背景颜色以减少过度绘制。但这并不是那么简单。一旦我在视图的背景可绘制对象中将颜色设置为透明,高度就会停止工作并且不再绘制阴影。我尝试在视图的 bakcground 可绘制对象中使用笔画而不是纯色,但它也不起作用。这可能是因为ViewOutline。所以我创建了一个自定义的OutlineProvider,它返回如下内容:
outline.drawRoundRect(0,0,view.getWidth(), view.getHeight(), someRadius);
现在我的View 有透明背景,阴影也可见,但它有问题。它看起来不太好。在View 的顶部,在其下方可以看到某种背景。下面是我的输出图片。左侧是具有透明背景和自定义 OutlineProvider 的视图。右侧是不透明的白色背景视图。
这是一个错误吗?还是有另一种方法可以实现这一目标?看起来这是一个非常简单的性能优化,但事实证明它比应有的复杂得多。
【问题讨论】:
-
如果我应该问你需要一个替代方案或让你的工作?
-
发布一些你得到的结果的图片:) 另外,除非你遇到性能问题,否则最好不要优化。如果不进行测量,很难猜测程序的哪些部分需要优化,可能还有其他更容易修复的较大瓶颈,并且这种更改可能需要同样多的功率或更多。
-
@Elltz 没关系。只想拥有一张透明背景和阴影的卡片。
-
@JohanShogun 减少过度绘制是一项重要的优化,尤其是当视图显示在列表中时。我附上了一张图片。
-
你有证据证明这是一种优化吗?你有问题吗?请提供一些测量值
标签: android android-5.0-lollipop