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));
}
参考になったURL
AllAbout

