2012年2月5日日曜日

(Canvas)三角形を描画する

Canvasの基本的な使い方については(Canvas)円周を描画するを参照。

多角形を描画するには、Pathオブジェクトを使用する。
Paintオブジェクトに書式の情報、Pathオブジェクトに経路の情報をセットして、
canvas.drawPath(path,paint)
によって多角形を描画できる。

単純に正三角形を描画するコードは以下。

Paint paint = new Paint();
paint.setColor(0xff0000ff);
paint.setStyle(Paint.Style.STROKE);
Path path = new Path();
path.moveTo(150f, 50f);
path.lineTo(150f-58f,150f);
path.lineTo(150f+58f, 150f);
path.close();
canvas.drawPath(path,paint);


上ではPaint.StyleのプロパティをSTROKEにしているが、これをFILLにした場合、囲まれた領域が塗りつぶされる。

(図の①) STROKE、閉曲線(上記の正三角形)

(図の②) STROKE、非閉曲線
Paint paint = new Paint();
paint.setColor(0xff0000ff);
paint.setStyle(Paint.Style.STROKE);
Path path = new Path();
path.moveTo(150f, 50f);
path.lineTo(150f-58f,150f);
path.lineTo(150f+58f, 150f);
canvas.drawPath(path,paint);

(図の③) FILL、閉曲線
Paint paint = new Paint();
paint.setColor(0xff0000ff);
paint.setStyle(Paint.Style.FILL);
Path path = new Path();
path.moveTo(150f, 50f);
path.lineTo(150f-58f,150f);
path.lineTo(150f+58f, 150f);
path.close();
canvas.drawPath(path,paint);

(図の④) FILL、非閉曲線
Paint paint = new Paint();
paint.setColor(0xff0000ff);
paint.setStyle(Paint.Style.FILL);
Path path = new Path();
path.moveTo(150f, 50f);
path.lineTo(150f-58f,150f);
path.lineTo(150f+58f, 150f);
canvas.drawPath(path,paint);



FILLで塗りつぶす場合は、Pathが必ずしも閉じている必要は無いようだ。

ちなみに、
Paint paint = new Paint();
paint.setColor(0xff0000ff);
Path path = new Path();
path.moveTo(150f, 50f);
path.lineTo(150f-58f,150f);
canvas.drawPath(path,paint);
のように経路が単に線分の場合、Paint.StyleをSTROKEにしていると線分が描画されるが、FILLにしていると何も描画されない。

0 件のコメント:

コメントを投稿