4

私はSuface、Suface Flinger、SurfaceView、SurfaceHolder、Bitmapのドキュメントから学んでいます。私は次の定義を見つけました:

SurfaceSurface はピクセルのコレクションです。サーフェスは、画面に合成されているピクセルを保持するオブジェクトです。画面に表示されるすべてのウィンドウ(ダイアログ、フルスクリーンアクティビティ、ステータスバー)には、描画する独自のサーフェスがあり、SurfaceFlingerはこれらを正しいZ順で最終的な表示にレンダリングします。サーフェスには通常、ダブルバッファレンダリングを行うために複数のバッファ(通常は2つ)があります。アプリケーションが終了するのを待たずに、サーフェスフリンガーが最後のバッファを使用して画面を合成している間に、アプリケーションは次のUI状態を描画できます。図。

SurfaceView このクラスは、ライブカメラプレビューをユーザーに提示するために使用されます。SurfaceViewは、Viewの特別な実装であり、アプリケーションが直接描画するための専用のSurfaceも作成します(通常のビュー階層の外で、ウィンドウの単一のSurfaceを共有する必要があります)。

ビットマップ ビットマップはピクセルのコレクションのラッパーであり、他の便利な機能を備えたピクセルの配列です。

Canvas Canvasは、すべての描画メソッドを含むクラスです。これは、JavaのAWT/SwingのGraphicsクラスに似ています。描画方法、ボックスなどに関するすべてのロジックがあります。Canvasはビットマップ上で動作します。

しかし、SurfaceHolderSurfaceFlingerについてはよくわかりません。上記の定義によれば、ビットマップはピクセルとSurfaceのコンテナでもあります。

これらすべてのオブジェクトの定義を明確に理解するのを手伝ってもらえますか?

4

1 に答える 1

2

Canvas は、グラフィックス API で描画を行うための基本的なコンテキストです。オフスクリーン描画を行うためのビットマップをラップする独自の Canvas を作成できます。もちろん、UI フレームワークは Canvases をウィジェットに渡して描画できるようにします。これらのウィジェットはすべて View のサブクラスです。または、他のウィジェットを含めることができる場合は、ViewGroup (View のサブクラス) からサブクラス化します。

高フレーム レートのアニメーションを実行する場合は、SurfaceView (または、画面上の OpenGL-ES レンダリングを実行する場合は、そのサブクラス GLSurfaceView) からサブクラス化する必要があります。各 SurfaceView には SurfaceHolder があり、いつでも呼び出すことができる lockCanvas メソッドがあり、更新された表示を描画してポストバックし、ユーザーが unlockCanvasAndPost を介してすぐに表示できるようにキャンバスを取得できます。

詳細については、2D グラフィックの概念カスタム ウィジェットのヒントを参照してください。

于 2012-05-17T10:31:55.933 に答える