Canvasクラス

広告

描画エリアとしてCanvasクラスを使います。前のページで見たとおり、Canvasクラスのオブジェクトを作成したら、そのオブジェクトをスクリーンに設定します。そしてCanvasクラスに文字や画像を描いていくという手順になります。

まず下記のクラス図を見てください。

  • Object
  • com.nttdocomo.ui.Frame
  • com.nttdocomo.ui.Canvas
  • public abstract class Canvas extends Frame

Canvasクラスもabstractクラスです。その為、実装が必要なメソッドがあります。

次にメソッド一覧を見ていきましょう。

メソッドの概要
Graphics getGraphics()
キャンバスに描画するためのグラフィックスオブジェクトを取得します。
int getKeypadState()
キーパッド状態を返すメソッドです。
int getKeypadState(int group) [iアプリオプションAPI]
キーのグループを指定してキーパッド状態を取得します。
void imeOn(String text, int displayMode, int inputMode)
キャンバスにおいてIMEを起動します。
abstract void paint(Graphics g)
キャンバスに表示するために使用するメソッドです。
void processEvent(int type, int param)
低レベルイベントが通知されたときに呼ばれるメソッドです。
void processIMEEvent(int type, String text)
IMEイベントが通知されたときに呼ばれるメソッドです。
void repaint()
キャンバス全体を再描画することを指示します。
void repaint(int x, int y, int width, int height)
キャンバスの一部の矩形領域を再描画することを指示します。

ざくっと見るとイベント処理などが出来そうな感じです。この中でまず重要なのがabstract指定されているpaintメソッドです。Canvasクラスのオブジェクトを作成するためには少なくともpaintメソッドを実装する必要があります。

paint
public abstract void paint(Graphics g)
キャンバスに表示するために使用するメソッドです。このメソッドは、キャンバ
スが表示されるタイミングで呼び出されます。 

[DoJa-1.0 のみ]
引数で渡される Graphics オブジェクトは、getGraphics メソッドで獲得したグ
ラフィックスが渡されます。
[DoJa-2.0 以降]
引数で渡される Graphics オブジェクトは、paint メソッドの呼び出し元が用
意して初期化と必要な設定を行ったグラフィックスが渡されます。 

引数で渡されたグラフィックスオブジェクトは、アプリケーションプログラマが
Graphics.dispose メソッドで破棄してはなりません。 paint メソッドの呼出し
元が、機種依存の処理をしたあとで dispose メソッドを呼び出して破棄します。
アプリケーションプログラマが disposeメソッドを呼び出した場合の振舞は、機
種依存です。

パラメータ: 
  g - 描画に使用する Graphics オブジェクトが渡されます。

では実際の作成方法を見てみます。よくある記述方法はCanvasクラスを継承したサブクラスを作成して、その中でpaintメソッドを実装する方法です。

import com.nttdocomo.ui.IApplication;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Canvas;

public class IAppliSample extends IApplicationo{
  public void start(){
    Display.setCurrent(new IAppliCanvas());
  }
}

class IAppliCanvas extends Canvas{
  public void paint(Graphics g){
    /* この中に描画処理を記述 */
  }
}

上記ではCanvasクラスを継承したIAppliCanvasを作成し、その中のpaintメソッド内で図形などの表示を行います。またIAppliCanvasのオブジェクトを作成し、DisplayクラスのsetCurrentメソッドを使って携帯端末のスクリーンに設定しています。

描画までの流れはこのような感じです。では実際に何かを描画する方法を見ていきます。その為には、paintメソッドの引数で指定されているGraphicsクラスについて詳細に見ていきましょう。

( Written by Tatsuo Ikura+ )

Facebook Page