package com.moral.yunfushao.ui; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.SweepGradient; import android.graphics.drawable.BitmapDrawable; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import com.moral.yunfushao.R; /** * 轮盘 * Created by haijiang on 2017/6/20. */ public class PanelView extends View { private Context mContext; private int mWidth; private int mmWidth; private int mmHeight; //绘制渐变圆弧的画笔 private Paint mShaderPaint; private int[] mshaderColor = new int[]{0xfff70e17,0xfff70e17,0xfff70e17,0xffff5c92,0xff00c44a,0xff00d062,0xff00f5af,0xff00f6cb,0xff00ccff,0xff179fff,0xffa054ff,0xffa53aff,0xffd74bff,0xfff64da5,0xfff70e17}; private int[] mshaderRedColor = new int[]{0xfff70e17,0xffff5c92}; private int[] mshaderZiseColor = new int[]{0xffa53aff,0xffd74bff,0xfff64da5}; private int[] mshaderBlueColor = new int[]{0xff00f6cb,0xff00ccff,0xff179fff,0xffa054ff}; private int[] mshaderGreenColor = new int[]{0xff00c44a,0xff00d062,0xff00f5af}; //环形渐变色值渲染 private SweepGradient mSweepGradient; private int mShaderWidth = 70; //画圆环上的线 private Paint paintGapLine; //小格子线颜色3°画一次 private int line1Color = 0xffb8e8f4; //小格子线颜色15°画一次 private int line2Color = 0xff7ed3ff; //小格子线颜色60°画一次 private int line3Color = 0xff009cff; //短线长度 private int line1Length = 50; //长线长度 private int line2Length = 70; private int lineWidth = 6; //内外间隔 private int widthInner = 120; private int paddingKedu = 40; private Paint mLinePaint; //画刻度文字 private Paint drawTextPaint; private int textColor = Color.GRAY; private int textSize = 36; private String[] level = {"绝对安全","建议回避","及时闪躲","紧急撤离"}; //内进度圆 private Paint mCirclePaint; private int innerCircleColor = 0xffb8e8f4; private int mCircleWidth = 70; private int innerPadding = 20; //画进度 private Paint mProgressPaint; private int progressCircleColor = 0xff53c9ff; //画指针 private Paint mBitPaint; private Bitmap mBitmap; private float percent = 0;//百分比数据 private String statusStr = "未连接"; public void setStatusStr(String statusStr){ this.statusStr = statusStr; postInvalidate(); } public void setPercent(float percent){ this.percent = percent; postInvalidate(); } public PanelView(Context context) { super(context); init(context); } public PanelView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context); } public PanelView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } private void init(Context mContext) { this.mContext = mContext; //初始化 mShaderWidth = dip2px(mContext,24); line1Length = dip2px(mContext,14); line2Length = dip2px(mContext,22); lineWidth = dip2px(mContext,2); widthInner = dip2px(mContext,40); paddingKedu = dip2px(mContext,10); mCircleWidth = dip2px(mContext,24); innerPadding = dip2px(mContext,8); textSize = dip2px(mContext,12); //渐变圆环 mShaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mShaderPaint.setStyle(Paint.Style.STROKE); mShaderPaint.setStrokeWidth(mShaderWidth); mShaderPaint.setStrokeCap(Paint.Cap.ROUND); paintGapLine = new Paint(Paint.ANTI_ALIAS_FLAG); paintGapLine.setColor(Color.WHITE); paintGapLine.setStrokeWidth(dip2px(mContext,3)); //刻度 mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mLinePaint.setStyle(Paint.Style.STROKE); mLinePaint.setStrokeWidth(lineWidth); mLinePaint.setColor(line1Color); //文字 drawTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); drawTextPaint.setColor(textColor); drawTextPaint.setTextSize(textSize); //内进度圆 mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setStyle(Paint.Style.STROKE); mCirclePaint.setStrokeWidth(mCircleWidth); mCirclePaint.setStrokeCap(Paint.Cap.ROUND); mCirclePaint.setColor(innerCircleColor); //画进度 mProgressPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mProgressPaint.setStyle(Paint.Style.STROKE); mProgressPaint.setStrokeWidth(mCircleWidth); mProgressPaint.setStrokeCap(Paint.Cap.ROUND); mProgressPaint.setColor(progressCircleColor); //画指针 mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBitPaint.setFilterBitmap(true); mBitPaint.setDither(true); mBitmap = ((BitmapDrawable)mContext.getResources().getDrawable(R.mipmap.zhizhen)).getBitmap(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); if (widthMode == MeasureSpec.EXACTLY) { mmWidth = widthSize; } else { mmWidth = dip2px(mContext, 300); } if (heightMode == MeasureSpec.EXACTLY) { mmHeight = heightSize; } else { mmHeight = dip2px(mContext, 300); } mWidth = mmWidth