Android2D ShapeDrawable 形を描く

Android2D では, ShapeDrawableというのがあります。

Developers
によると, Dynamicに図形を描画するためのオブジェクトということですが, オブジェクトを作ってプロパティを入れて, それをCanvasに貼付けるという
使い方のようです。

ShapeDrawable というクラスがBaseになっていて, その拡張クラスのオブジェクトを作成して, ShapeDrawableをつくりそれにプロパティを入れて,
Canvasに描画するという流れです。

ShapeDrawableで使えるのは,

Object Constructor Description
RectShape RectShape() 四角です
RoundRectShape oundRectShape(float[] outerRadii, RectF inset, float[] innerRadii) 四角に丸角などがつけられます
PathShape PathShape(Path path, float stdWidth, float stdHeight) パスを描きます
ArcShape ArcShape(float startAngle, float sweepAngle) 弧です
OvalShape OvalShape() 楕円形です

Google のサンプルをちょっと改造して作ってみました。

public class DrawableTestView extends View
{
	private ShapeDrawable drawshape;
	
	private ShapeDrawable roundRect;
	
	public DrawableTestView ( Context context )
	{
		super(context);
		
		drawshape = new ShapeDrawable(new OvalShape());
		drawshape.getPaint().setColor(0xff74AC23);
		drawshape.setBounds(10, 10, 310, 60);
		
		float[] outerR = new float[] { 1, 1, 1, 1, 1, 1, 1, 1 };
		RectF inset = new RectF(5, 5, 5, 5);
		float[] innerR = new float[] { 1, 1, 0, 0, 1, 1, 0, 0 };
		roundRect = new ShapeDrawable(new RoundRectShape(outerR, inset, innerR));
		roundRect.getPaint().setColor(Color.BLUE);
		roundRect.setBounds(50, 50, 250, 250);
	}

	@Override
	protected void onDraw ( Canvas canvas )
	{
		drawshape.draw(canvas);
		roundRect.draw(canvas);
	}
}

コンストラクタでShapeDrawableを作成して, onDrawで描くという形です。

shapedrawable

参考
愚鈍なプログラマーの独り言 こちらのブログでは丁寧に使い方などの解説をしていらっしゃいます。すばらしい。