色の設定と図形の描画
では、実際に簡単な図形を描画させて見ることにします。DrawViewのonDrawメソッドを以下のように修正してみましょう。
public void onDraw(Canvas c){
c.drawColor(Color.BLACK);
Paint fill_paint = new Paint();
fill_paint.setStyle(Paint.Style.FILL);
fill_paint.setColor(Color.BLUE);
c.drawRect(100f, 100f, 200f, 200f, fill_paint);
fill_paint.setColor(Color.RED);
c.drawOval(new RectF(0f,0f,100f,100f), fill_paint);
}
実行すると、赤い円と青い四角形が表示される。 |
ここでは、赤と青の円・四角形をそれぞれ描画してみました。とりあえずは、図形描画の基本はこれでわかることでしょう。
ここでは、大きく分けて2つのオブジェクトが登場します。1つは、onDrawで引数に渡される「Canvas」、そしてもう1つは「Paint」です。
Canvasは、そのビューへの描画を行うための機能を提供するクラスです。ここに用意されている描画関係のメソッドを呼び出すことで図形を描画することができます。これはGraphicsクラスとほぼ同じですね。
では、Paintは何か? これは、描画(特に、塗りつぶし方)に関する各種の設定情報を管理するクラスだと考えてください。SwingなどでもGraphics2Dでは同様のクラスが登場するので、ぴんと来た人もいるかも知れませんね。
描画を行う場合、まず、塗り方(図形の塗り方の方式や塗りつぶす色に関する設定など)をPaintインスタンスとして用意します。そして、Canvasにある描画メソッドを呼び出して描画を行い、このとき用意したPaintインスタンスを渡してやります。これで、Paintで指定したやり方で図形が描かれる、というわけです。
では、実行している処理を見ていきましょう。まず最初に、こういうことをやってますね。
c.drawColor(Color.BLACK);
このdrawColorは、このViewの背景色を指定するものです。これで最初に背景を設定します。ここでは「Color.BLACK」という値を使っていますね。色の値というのは、androidではint値で指定されるのですが、これはColorクラスに用意されているクラスフィールドや、色の値を返すメソッドなどを使って指定します。ここでのBLACKのように、主な色はすべてColorクラスに用意されているので、まずはそれを利用していくとよいでしょう。
Paint fill_paint = new Paint();
次に、描画に使うPaintインスタンスを作成します。これは、そのままnewするだけですね。
fill_paint.setStyle(Paint.Style.FILL);
描画スタイルを設定します。ここでは「Paint.Style.FILL」を指定し、図形の内部を塗りつぶす方式を選びます。他、輪郭線だけを描くSTROKE、塗りつぶしと輪郭線の両方を描くFILL_AND_STROKEなどがあります。
fill_paint.setColor(Color.BLUE);
Paintに色の設定を行います。setColorで、色の値を指定するだけです。
c.drawRect(100f, 100f, 200f, 200f, fill_paint);
四角形を描画します。drawRectは、引数の値をもとに四角形を描きます。引数には、左・上・右・下の位置と使用するPaintオブジェクトを指定します。
fill_paint.setColor(Color.RED);
c.drawOval(new RectF(0f,0f,100f,100f), fill_paint);
再びPaintのsetColorを呼び出して私用する色を変更し、「drawOval」で円を描きます。これは、描く領域を示す値(RectFインスタンス)と使用するPaintインスタンスを引数に渡して呼び出します。
領域を指定するRectFというのは、AWTにあるRectと同様に、左・上・右・下の位置を引数で渡してインスタンスを作成します。