グラフィック描画とViewクラス
JavaのAWTやSwingなどでは、グラフィックの描画を行わせる場合には、そのためのコンポーネントクラスを定義し、その中にpaintメソッドなどを用意して描画を行わせていましたね。ではandroidではどうやってグラフィックを描画するのでしょうか。
基本的な考え方は、実はAWTなどとほぼ同じです。すなわち、専用のクラスを定義し、それを画面にはめ込んで表示する。専用クラスの中には、描画のためのメソッドを用意して、そこで描画の処理を実行する。そういうスタイルですね。
グラフィック表示用に用意するクラスは、一般に「View」クラスのサブクラスとして作成します。Viewというのは、画面に表示される部品類(ビュー)の基本となるクラスです。このクラスを継承したクラスを用意し、それをActivityクラスに組み込みます。この組み込み処理は、「setContentView」メソッドを使って行います。
Viewのサブクラスは、だいたい以下のような形で定義します。
class クラス extends View {
public コンストラクタ(Context context) {
super(context);
……初期化処理……
}
public void onDraw(Canvas c){
……描画の処理……
}
}
スーパークラスであるViewには、Contextを引数に持つコンストラクタしか用意されておらず、引数なしのデフォルトコンストラクタはありません。したがって、必ずContextを引数に持つコンストラクタを定義する必要があります。これは、特に処理がなければsuperするだけでかまいません。
実際の描画処理を用意するのが、「onDraw」メソッドです。これは「Canvas」というクラスが引数に渡されます。これは、AWT/SwingにおけるGraphicsクラスに相当するものとイメージするとよいでしょう。
グラフィック描画の雛形を作る
では、実際に簡単なサンプルを造ってみましょう。とりあえずは、何も表示しない、プログラムの骨格部分を作成してみましょう。ここではDrawViewというクラスを定義し、これを表示させるようにしておきましょう。
package jp.allabout.android;
import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.View;
public class MyAndy extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawView view = new DrawView(getApplication());
setContentView(view);
}
}
class DrawView extends View {
public DrawView(Context context) {
super(context);
}
public void onDraw(Canvas c){
// TODO: ここに描画処理を追加
}
}
これを実行しても、画面は真っ暗でまだ何も表示はされません。とりあえず、これで「入れ物」はできました。これに追加しながら描画を行っていきましょう。