Android 2D Graphics基礎

Andoird による2D Graphicsの基礎です。English version

Java では, AWTなどにより画面にGraphics Contextを利用して座標指定などをして描画するなどしていました。Androidの場合もだいたい同じです。
Viewの拡張クラスを作って

まずAWTでの復習です

public void paint( Graphics g )
{
   Graphics2D g2 = (Graphics2D)g;
   Ellipse2D e = new Ellipse2D.Doule(x,y, w, h);

   g2.setPaint(Color.gray);
   g2.fill(e);
   g2.setPaint(Color.black);
   g2.draw(e);
}

これはコードの一部ですが, GraphicsをGraphics2Dに変換してそれに対して処理を行います。

Androidではどうでしょうか, Viewクラスを拡張して, onDrawメソッドをOverrideして描画します。

ここで理解しておきたいことは, こいつはViewなのです。ですので, Viewに付属する処理であればなんでもできます。
イベントも追加できますしね。

Canvasというオブジェクトに対して描画のコードを入れます。上でいうGraphics2Dでしょうか。
ひな形はこんな感じです。

public class DrawView extends View
{

public DrawView ( Context context )

{

super(context);

}

@Override
protected void onDraw ( Canvas canvas )
{
//super.onDraw(canvas);
// Draw something
}
}

描画処理はonDrawメソッド上に書きます。

簡単な例として円でも描画してみます。

public class DrawView extends View
{
private Paint paint;

private RectF rect;

public DrawView ( Context context )
{
super(context);

paint = new Paint();
rect = new RectF(0f, 0f, 100f, 100f); // left, top, right, bottom
}

@Override
protected void onDraw ( Canvas canvas )
{
//super.onDraw(canvas);
canvas.drawColor(Color.WHITE); // Background color

// If use new instance,
// new RectF(0f, 0f, 100f, 100f)
// Avoid object allocations during draw

paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLUE);
canvas.drawOval(rect, paint);
}
}

Paintというのが出てきました。いわゆるペンのようなものです。AWTでもそんなのがあった気がします。
このコードではコンストラクタでペンを作成,
ちなみにonDrawメソッドでインスタンスを作成すると, “Avoid object allocations during draw”というWarningが出ます。
drawする度に, インスタンスを作るんじゃねえよ。という警告ですが, 無視していただいても動作します。
気になるようであればnew は別のところでやりましょう。

利用するActivityに貼付けます。(一部のみ)

@Override
protected void onCreate ( Bundle savedInstanceState )
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addContentView(new DrawView(this), new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}

drawoval

参考になったURL
AllAbout