Edited at

使いやすいシンプルな円を描くView

More than 1 year has passed since last update.


円を描きます!

xmlでやったり、Canvasを使うんでしょ・・・大きさの設定や位置の設定とか面倒だな・・・と思いきや、結構簡単なんです。

こんな感じ

public class CircleView extends View {

private Paint paint;

public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
}

public CircleView(Context context) {
super(context);
paint = new Paint();
}

public void setColor(int color){
paint.setColor(getResources().getColor(color));
invalidate();
}

@Override
protected void onDraw(Canvas canvas) {
paint.setAntiAlias(true);
canvas.drawCircle(canvas.getHeight() / 2, canvas.getHeight() / 2, (canvas.getWidth() / 2) - 2, paint);
}
}

外からsetColorで色も指定できます!

こんな感じに

circleView.setColor(R.color.white);

onDrawでcanvas.drawCircleを使い円を描きます。

これは、自分自身の大きさを取得し、Viewの真ん中に円を描く指定しています。これだけ

そしてこのクラスをlayoutを定義するxmlから以下のように設定し使います。

<test.ui.widget.CircleView

android:id="@+id/circle_view"
android:layout_width="48dp"
android:layout_height="48dp" />

CircleView circleView = (CircleView) view.findViewById(R.id.circle_view);

circleView.setColor(R.color.black);

こうすると、48dp*48dpのViewの真ん中に黒い円が描かれます。

シンプルで汎用性高いと思います。