package suda.sudamodweather.widget; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; /** * Created by ghbha on 2016/5/14. */ public class AqiView extends View { public AqiView(Context context) { super(context); } public AqiView(Context context, AttributeSet attrs) { super(context, attrs); } public AqiView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { width = MeasureSpec.getSize(widthMeasureSpec); height = width * 550 / 992; setMeasuredDimension((int) width, (int) (height + getFitSize(100))); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setAntiAlias(true); //设置画笔为无锯齿 paint.setColor(Color.WHITE); //设置画笔颜色 paint.setStrokeWidth(getFitSize(60)); //线宽 paint.setStyle(Paint.Style.STROKE); //外围虚线 float center = width / 2; float radius = height - getFitSize(100); RectF rect = new RectF(center - radius + getFitSize(40), center - radius, center + radius - getFitSize(40), center + radius - getFitSize(40)); paint.setAlpha(100); canvas.drawArc(rect, 180, 180, false, paint); //进度实线 paint.setAlpha(255); canvas.drawArc(rect, 180, (180 * progress * 1.0f / 500), false, paint); //文字描述 paint.setStrokeWidth((float) 1.0); paint.setTextSize(getFitSize(120)); paint.setStyle(Paint.Style.FILL); paint.setTextAlign(Paint.Align.CENTER); canvas.drawText(progress + "", center, radius + getFitSize(30), paint); paint.setTextSize(getFitSize(70)); canvas.drawText(label, rect.centerX(), radius + getFitSize(180), paint); } private float getFitSize(float orgSize) { return orgSize * width / 992; } public void setProgressAndLabel(int progress, String label) { this.progress = progress; this.label = label; this.invalidate(); } /////////////////////////////////////////////////////////// Paint paint = new Paint(); private float height, width; private int progress = 0; private String label = ""; }