Canvas.saveLayer 允许您将渲染重新定位到屏幕外缓冲区。缓冲区可以是位图或 GPU 纹理,具体取决于您如何设置视图的图层类型 - 软件或硬件渲染(即 LAYER_TYPE_SOFTWARE 或 LAYER_TYPE_HARDWARE,请参阅此)
当您调用相应的 restoreToCount 时,此缓冲区会合成到上一个目标中。因此,这允许您进行各种视觉效果,如淡入淡出(即 alpha 动画)。
理想情况下,您希望使用硬件层来制作 alpha 动画,因为 alpha 可以是硬件加速的。
您很少直接调用 canvas.setLayer 来设置或设置 alpha 动画。您要么使用 view.setAlpha,要么使用动画然后使用 view.animate().alpha(0),两者在内部最终都会在画布上调用 setAlphaLayer。
因此,您唯一要做的就是确保在开始 alpha 动画之前将层类型设置为 View.LAYER_TYPE_HARDWARE(如果设备支持,否则软件层通过 LAYER_TYPE_SOFTWARE),然后在动画结束时将其删除。
在 4.0 中,您可以执行以下操作:
view.setLayerType(LAYER_TYPE_HARDWARE, null);
view.animate().alpha(0).setListener (new AnimationListener() {
public void onAnimationEnd (Animator animation) {
view.setLayerType(LAYER_TYPE_NONE, null);
}
});
在 4.1 中,这被简化为:
view.animate().alpha(0).withLayer();