1.写一个类继承View
2.自定义属性CircleColor
3.重写onMeasure方法
4.重写onDraw方法
<?xml version=“1.0” encoding=“utf-8”?>
<resources>
<declare-styleable name=”CircleView”>
<attr name="circle_color" format="color"/>
</declare-styleable>
</resources>
public class CircleView extends View {
private int mColor =Color.RED;
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public CircleView (Context context, AttributeSet attrs){
this(context,attrs,0)
public CircleView(Context context ,AttrbuteSet attrs, int deStyeAttr){
super (context,attrs,deStyleAttr);
TypedArray a= context.obtainStyledAttributes(attrs,R.styleable.CircleView);
mColor=a.getColor(R.styleable.CircleView_circle_color,Color.RED);
a.recycle();
init();
}
private void init(){
mPaint.setColor(mColor);
}
@override
protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSpecSize =MeasureSpec.getSize(withMeasureSpec);
int heightSpecMode =MeasureSpec.getMode(heightMeasureSpec);
int heightSpecSize=MeasureSpec.getSize(heightMeasureSpec);
if(widthSpecMode==MeasureSpec.AT_MOST&&heightSpecMode ==MeasureSpec.AT_MOST){
setMeasuredDimension(200,200);
}else if(withSpecMode==MeasureSpec.AT_MOST)[
setMeasuredDimension(200,heightSpecSize);
} else if(heightMeasureMode == MeasureSpec.AT_MOST){
setMeasuredDimension(widthSpecSize,200);
}
}
@overtide
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
final int paddingLeft =getPaddingLeft();
final int paddingRight=getPaddingRight();
final int paddingTop=getPaddingTop();
final int paddingBottom =getPaddingBottom();
int width =getWidth()-paddingLeft- paddingRight;
int height=getHeight()-paddingTop-paddingBottom;
int radius = Math.min(width,height)/2;
canvas.drawCircle(paddingLeft+width/2,paddingTop+height/2,radius,mPaint);
}
}
}
}