C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

多角形を描画するには, Canvasオブジェクトを取得して, このCanvasに描画する.

多角形を描く

  • DrawPolygon.java
    • Paintクラスのインスタンスを生成する.
    • Paint#setStyleメソッドで, 線のみか, 内部を塗りつぶすか, 線で描く内部を塗りつぶすかを指定する.
    • Pathクラスのインスタンスを生成する.
    • Path#moveToメソッドとlineToメソッドを使って, 多角形のパスを設定する.
    • Canvas#drawPathメソッドで, 多角形のパスを指定して多角形を描く.
package com.moonlight_aska.android.drawpolygon;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.os.Bundle;
import android.view.View;
public class DrawPolygon extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    MyView view = new MyView(getApplication());
    setContentView(view);
  }
}

class MyView extends View {
  public MyView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
  }

  @Override
  protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.WHITE);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    // 三角形を描く
    paint.setColor(Color.GREEN);
    paint.setStyle(Paint.Style.STROKE);
    Path path = new Path();
    path.moveTo(160f, 30f);
    path.lineTo(110f, 100f);
    path.lineTo(210f, 100f);
    path.lineTo(160f, 30f);
    canvas.drawPath(path, paint);
    // 星形を描く
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    path.reset();
    float theta = (float)(Math.PI * 72 / 180);
    float r = 50f;
    PointF center = new PointF(160f, 200f);
    float dx1 = (float)(r*Math.sin(theta));
    float dx2 = (float)(r*Math.sin(2*theta));
    float dy1 = (float)(r*Math.cos(theta));
    float dy2 = (float)(r*Math.cos(2*theta));
    path.moveTo(center.x, center.y-r);
    path.lineTo(center.x-dx2, center.y-dy2);
    path.lineTo(center.x+dx1, center.y-dy1);
    path.lineTo(center.x-dx1, center.y-dy1);
    path.lineTo(center.x+dx2, center.y-dy2);
    path.lineTo(center.x, center.y-r);
    canvas.drawPath(path, paint);
  }
}





このページへのコメント

path.close()ってのがあるんですか?
Windowsプログラミングで, MoveTo, LineToを使って描いていたもので...
情報どうもありがとうございました.

Posted by aska 2011年09月23日(金) 20:51:54

大変参考になります。
多角形で使用するPathですが、最後に始点を追加しなくても、path.close()で閉じられるようです。

Posted by taka 2011年09月23日(金) 00:05:41

コメントをかく


ユーザーIDでかく場合はこちら
「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(Android Things)

周辺I/Oポート(2)

逆引き(応用編)

AD



管理人のみ編集できます