Canvas.saveLayer を使用すると、レンダリングをオフスクリーン バッファにリターゲットできます。バッファは、ビューのレイヤ タイプの設定方法に応じて、ビットマップまたは GPU テクスチャにすることができます - ソフトウェアまたはハードウェア レンダリング (つまり、LAYER_TYPE_SOFTWARE または LAYER_TYPE_HARDWARE、こちらを参照)
このバッファーは、対応する restoreToCount を呼び出すと、前のターゲットに合成されます。これにより、フェード (つまり、アルファ アニメーション) などのさまざまな視覚効果を実行できます。
アルファはハードウェア アクセラレーションできるため、ハードウェア レイヤーを使用してアルファ アニメーションを実行するのが理想的です。
canvas.setLayer を直接呼び出して、アルファを設定またはアニメートすることはめったにありません。view.setAlpha を使用するか、アニメーション化する場合は view.animate().alpha(0) を使用します。どちらも内部的にキャンバスで setAlphaLayer を呼び出すことになります。
そのため、レイヤー タイプを 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();