渲染精品课
核心点:
当我们的view使用了alpha做精美的效果的同时会给渲染器增加额外的负担
- 会开辟一个空间,进行离屏渲染
- 一张图的展示需要经过两次渲染,增加了开销
如何解决这个问题
- 我们可以让GPU增加硬件支持,但是也是有成本的,就是增加了内存开销(GPU需要时刻预览一个内存区域来完成绘制任务);使用硬件渲染会让绘制所读提升2倍;setL
- 需要再动画完成之后需要告诉GPU释放硬件支持;
- 上面这个步骤可以简单替换成
ViewPropertyAnimator.alpha(0.0f).withLayer();
下面是解决思路

当然还有其他的方案: 就是如果比如阴影效果,包含非透明部分和透明部分,但是他们不会重叠,那么我们可以通过覆写 View.hasOverlappingRendering=false实现



但是如果存在覆盖的透明view,但是我们强制设置View.hasOverlappingRendering=false会出现透明度错误问题,如下右图,alpha偏淡
