The following code shows how to Create custom View.
Main Activity Java code
package com.java2s.myapplication3.app; // w w w. jav a 2s.c o m import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Point; import android.util.AttributeSet; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView myView = new MyView(this); setContentView(myView); } } class MyView extends View { private Paint mPaint; private Point mCenter; private float mRadius; /* * Java Constructor */ public BullsEyeView(Context context) { this(context, null); } /* * XML Constructor */ public BullsEyeView(Context context, AttributeSet attrs) { this(context, attrs, 0); } /* * XML Constructor with Style * Do any initialization of your view in this constructor */ public BullsEyeView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Style.FILL); mCenter = new Point(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width, height; int contentWidth = 200; int contentHeight = 200; width = getMeasurement(widthMeasureSpec, contentWidth); height = getMeasurement(heightMeasureSpec, contentHeight); setMeasuredDimension(width, height); } private int getMeasurement(int measureSpec, int contentSize) { int specSize = MeasureSpec.getSize(measureSpec); switch (MeasureSpec.getMode(measureSpec)) { case MeasureSpec.AT_MOST: return Math.min(specSize, contentSize); case MeasureSpec.UNSPECIFIED: return contentSize; case MeasureSpec.EXACTLY: return specSize; default: return 0; } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { if (w != oldw || h != oldh) { //If there was a change, reset the parameters mCenter.x = w / 2; mCenter.y = h / 2; mRadius = Math.min(mCenter.x, mCenter.y); } } @Override protected void onDraw(Canvas canvas) { mPaint.setColor(Color.RED); canvas.drawCircle(mCenter.x, mCenter.y, mRadius, mPaint); } }