2

Android Javaのグラフィックスは初めてです。私は遭遇Canvas.saveLayer(...) Canvas.restore(...)しましたが、これらの操作の有用性 (パフォーマンスの面では ao) は完全に私を逃れています。したがって、レイヤーは後続のlockCanvas ~ unlockCanvasAndPostサイクルにわたって保存されますか? または、フレームごとに「バッファリングされたビットマップ」を保存して復元する意味は何ですか?

これらのレイヤーを使用してアルファアニメーション(再合成???)を行うことについて言及している人もいますが、それを行う方法の明確な例が見つからないようです...

また

ここで私は完全に間違ったツリーを吠えていますか?

4

1 に答える 1

2

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();

于 2013-01-06T04:41:19.043 に答える