package com.liyu.fakeweather.widgets; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; import com.liyu.fakeweather.R; import com.liyu.fakeweather.utils.SizeUtils; import com.liyu.fakeweather.utils.ThemeUtil; /** * Created by liyu on 2016/8/23. */ public class StationIndicator extends View { private Paint paint; private float roundWidth; private float innerCircle; private boolean isChecked; private int color; public StationIndicator(Context context) { this(context, null); } public StationIndicator(Context context, AttributeSet attrs) { this(context, attrs, 0); } public StationIndicator(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); paint = new Paint(); TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.IndicatorItem); color = mTypedArray.getColor(R.styleable.IndicatorItem_indicatorColor, ThemeUtil.getThemeColor(context, R.attr.colorPrimary)); roundWidth = mTypedArray.getDimension(R.styleable.IndicatorItem_indicatorRingWidth, SizeUtils.dp2px(context, 3)); isChecked = mTypedArray.getBoolean(R.styleable.IndicatorItem_indicatorChecked, false); innerCircle = mTypedArray.getDimension(R.styleable.IndicatorItem_indicatorInnerCircle, SizeUtils.dp2px(context, 4)); mTypedArray.recycle(); } @Override protected void onDraw(Canvas canvas) { paint.setColor(color); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); int center = getWidth() / 2; int height = getHeight(); int padding = SizeUtils.dp2px(this.getContext(), 4); if (isChecked) { //绘制内圆 paint.setStyle(Paint.Style.FILL); canvas.drawCircle(center, height / 2, innerCircle, this.paint); } //绘制外圆 paint.setStyle(Paint.Style.STROKE); this.paint.setStrokeWidth(roundWidth); canvas.drawCircle(center, height / 2, innerCircle + padding, this.paint); this.paint.setStrokeWidth(roundWidth); canvas.drawLine(center, 0, center, height / 2 - innerCircle - padding, paint); canvas.drawLine(center, height / 2 + innerCircle + padding, center, height, paint); super.onDraw(canvas); } public boolean isChecked() { return isChecked; } public void setChecked(boolean checked) { if (isChecked == checked) return; this.isChecked = checked; postInvalidate(); } }