package com.example.atest;
import android.content.Context;
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 CustomView extends View {
private Paint paint;
private Point center;
private float mRadius;
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Style.FILL);
center=new Point();
}
public CustomView(Context context, AttributeSet attrs) {
this(context,attrs,0);
}
public CustomView(Context context) {
this(context,null);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width;
int height;
int contentWidth=100;
int contentHeigth=100;
width=getMeasurement(widthMeasureSpec, contentWidth);
height=getMeasurement(heightMeasureSpec, contentHeigth);
// setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
setMeasuredDimension(width, height);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if(w!=oldw||h!=oldh){
center.x=w/2;
center.y=w/2;
mRadius=Math.min(center.x,center.y);
}
}
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.EXACTLY:
return specSize;
case MeasureSpec.UNSPECIFIED:
return contentSize;
default:
return 0;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(Color.RED);
canvas.drawCircle(center.x, center.y, mRadius, paint);
paint.setColor(Color.WHITE);
canvas.drawCircle(center.x, center.y, mRadius*0.8f, paint);
paint.setColor(Color.BLUE);
canvas.drawCircle(center.x, center.y, mRadius*0.6f, paint);
paint.setColor(Color.WHITE);
canvas.drawCircle(center.x, center.y, mRadius*0.4f, paint);
paint.setColor(Color.RED);
canvas.drawCircle(center.x, center.y, mRadius*0.1f, paint);
}
}
onMeasure方法测量视图的大小,onDraw方法绘制视图
<com.example.atest.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/cv1"/>
自定义视图添加到XML布局中