View 派生クラスで Canvas に描画する基礎

Canvas を利用するには主に二種類方法があります。

ひとつは UI スレッド内で onDraw メソッドのコールバックによって描画する方法。そしてもうひとつは独立したスレッドで、SurfaceView を管理して Canvas に描画する方法です。

SurfaceView については「描画用スレッドを実装できる SurfaceView の利用方法」をみてください。

ここでは UI スレッド内で onDraw メソッドのコールバックで描画する方法を示します。

何かを描画するためには、4 つの基本的な構成要素が必要です。

その 4 つとは、ピクセルを保持するための「ビットマップ (Bitmap)」、描画呼び出しをホストするための「キャンバス (Canvas)」(そしてこれがビットマップに描く)、 「描画プリミティブ」(例えば、矩形、テキスト等)、そして「ペイントオブジェクト」(色などの描画のスタイルを定義)です。

本来、これら全てを準備する必要があるということを、まず覚えておいてください。登場するものが多くて、案外面倒ですね。

こうした面倒を Android のフレームワークが軽減してくれます。

onDraw コールバックとは

画面を再描画する処理はコストが高いので、基本的に必要がなければ行なわれません。

プログラミングで画面を更新するには、再描画を要求する必要があります。これは invalidate() メソッドで行ないます。

invalidate という単語は「無効化する」とか「破棄する」というような意味です。invalidate() メソッドで再描画を要求するということは、画面に表示されている内容を破棄して、新しい画面を表示せよ、ということです。

View クラスを継承した派生クラスで onDraw コールバックを利用すると、メソッドの引数に Canvas オブジェクトが渡されます。

これは Android フレームワークが、事前定義されたキャンバスを渡してくれている、ということです。

またそれに紐付くビットマットも用意されます。

したがって、View の派生クラスにて、Canvas に描画するのは比較的単純な作業です。Paint オブジェクトを用意して、どのような描画を行なうのか指定し、 canvas の描画メソッドを利用してキャンバスに図形を描く。そして、それが裏のビットマップに描かれる、という流れになります。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門