// Path: app/src/main/java/com/yoga/oneweather/util/Constant.java
// public class Constant {
// 
//     public static final boolean ANTI_ALIAS = true;
// 
//     public static final int DEFAULT_SIZE = 150;
//     public static final int DEFAULT_START_ANGLE = 270;
//     public static final int DEFAULT_SWEEP_ANGLE = 360;
// 
//     public static final int DEFAULT_ANIM_TIME = 1500;
// 
//     public static final int DEFAULT_MAX_VALUE = 100;
//     public static final int DEFAULT_VALUE = 50;
// 
//     public static final int DEFAULT_HINT_SIZE = 25;
//     public static final int DEFAULT_UNIT_SIZE = 30;
//     public static final int DEFAULT_VALUE_SIZE = 40;
//     public static final int DEFAULT_TEXT_SIZE = 30;
// 
//     public static final int DEFAULT_ARC_WIDTH = 15;
// 
// 
//     public static final String WEATHER_URL = "https://free-api.heweather.com/v5/";
//     public static final String LOCATE_KEY = "dc60aaa882c6854f93ac7e3d55516f58";
//     public static final String WEATHER_KEY = "1c8bebce635648809e98babb820856c9";
//     public static final String BASE_URL = "http://oy5qvvdsx.bkt.clouddn.com/oneweather/";
//     public static final String CONDITION_ICON = BASE_URL + "condition_icon/";
//     public static final String BACKGROUD_IAMGE = BASE_URL + "image/jpg/";
//     
// }
// 
// Path: app/src/main/java/com/yoga/oneweather/util/LogUtil.java
// public class LogUtil {
//     public static final int VERBOSE = 1;
//     public static final int DEBUG = 2 ;
//     public static final int INFO = 3 ;
//     public static final int WARN = 4 ;
//     public static final int ERROR = 5 ;
//     public static final int NOTHING = 6 ;
// 
//     public static int level = VERBOSE ;
//     public static void v(String tag, String msg){
//         if(level == VERBOSE){
//             Log.v(tag, msg);
//         }
//     }
//     public static void d(String tag,String msg){
//         if(level <= DEBUG){
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void i(String tag,String msg){
//         if(level <= INFO){
//             Log.i(tag, msg);
//         }
//     }
// 
// 
//     public static void w(String tag,String msg){
//         if(level <= WARN){
//             Log.w(tag, msg);
//         }
//     }
// 
//     public static void e(String tag,String msg){
//         if(level <= ERROR){
//             Log.e(tag, msg);
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/com/yoga/oneweather/util/MiscUtil.java
// public class MiscUtil {
//     /**
//      * 测量 view
//      * @param measureSpec
//      * @param defaultSize View的默认大小
//      * @return
//      */
//     public static int measure(int measureSpec ,int defaultSize){
//         int result = defaultSize;
//         int specMode = View.MeasureSpec.getMode(measureSpec);
//         int specSize = View.MeasureSpec.getSize(measureSpec);
//         if(specMode == View.MeasureSpec.EXACTLY){
//             result = specSize;
//         }else if(specMode == View.MeasureSpec.AT_MOST){
//             result = Math.min(result,specSize);
//         }
//         return result;
//     }
// 
//     /**
//      * dp 转 px
//      * @param context
//      * @param dip
//      * @return
//      */
//     public static int dipToPx(Context context, float dip){
//         float density  = context.getResources().getDisplayMetrics().density;
//         return (int) (dip * density + 0.5f * (dip >= 0 ? 1 : -1));
//     }
// 
// 
//     /**
//      * 获取数值精度格式化字符串
//      * @param precision
//      * @return
//      */
//     public static String getPrecisionFormat(int precision){
//         return "%."+precision+"f" ;
//     }
// 
// 
// 
//     /**
//      * 测量文字高度
//      */
//     public static float measureTextHeight(Paint paint){
//         Paint .FontMetrics fontMetrics = paint.getFontMetrics();
//         return (Math.abs(fontMetrics.ascent) + fontMetrics.descent);
//     }
// 
// 
// }


import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.SweepGradient;
import android.graphics.Typeface;
import android.support.v4.content.ContextCompat;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
import com.yoga.oneweather.BuildConfig;
import com.yoga.oneweather.R;
import com.yoga.oneweather.util.Constant;
import com.yoga.oneweather.util.LogUtil;
import com.yoga.oneweather.util.MiscUtil;
    private float mArcWidth;
    private float mStartAngle,mSweepAngle;
    private RectF mRectF;
    //渐变的角度是360度，如果只显示270度，会缺失一段颜色
    private SweepGradient mSweepGradient;
    private int[] mGradientColors = {Color.GREEN,Color.YELLOW,Color.RED};
    //当前进度
    private float mPercent;
    //动画时间
    private long mAnimTime;
    //属性动画
    private ValueAnimator mAnimator;

    //绘制背景圆弧
    private Paint mBgArcPaint;
    private int mBgArcColor;
    private float mBgArcWidth;

    //圆心坐标，半径
    private Point mCenterPoint;
    private float mRadius;
    private float mTextOffsetPercentInRadius;

    public CircleProgress(Context context, AttributeSet attrs){
        super(context,attrs);
        init(context,attrs);
    }

    private void init(Context context, AttributeSet attrs){
        mContext = context;
// Path: app/src/main/java/com/yoga/oneweather/util/Constant.java
// public class Constant {
// 
//     public static final boolean ANTI_ALIAS = true;
// 
//     public static final int DEFAULT_SIZE = 150;
//     public static final int DEFAULT_START_ANGLE = 270;
//     public static final int DEFAULT_SWEEP_ANGLE = 360;
// 
//     public static final int DEFAULT_ANIM_TIME = 1500;
// 
//     public static final int DEFAULT_MAX_VALUE = 100;
//     public static final int DEFAULT_VALUE = 50;
// 
//     public static final int DEFAULT_HINT_SIZE = 25;
//     public static final int DEFAULT_UNIT_SIZE = 30;
//     public static final int DEFAULT_VALUE_SIZE = 40;
//     public static final int DEFAULT_TEXT_SIZE = 30;
// 
//     public static final int DEFAULT_ARC_WIDTH = 15;
// 
// 
//     public static final String WEATHER_URL = "https://free-api.heweather.com/v5/";
//     public static final String LOCATE_KEY = "dc60aaa882c6854f93ac7e3d55516f58";
//     public static final String WEATHER_KEY = "1c8bebce635648809e98babb820856c9";
//     public static final String BASE_URL = "http://oy5qvvdsx.bkt.clouddn.com/oneweather/";
//     public static final String CONDITION_ICON = BASE_URL + "condition_icon/";
//     public static final String BACKGROUD_IAMGE = BASE_URL + "image/jpg/";
//     
// }
// 
// Path: app/src/main/java/com/yoga/oneweather/util/LogUtil.java
// public class LogUtil {
//     public static final int VERBOSE = 1;
//     public static final int DEBUG = 2 ;
//     public static final int INFO = 3 ;
//     public static final int WARN = 4 ;
//     public static final int ERROR = 5 ;
//     public static final int NOTHING = 6 ;
// 
//     public static int level = VERBOSE ;
//     public static void v(String tag, String msg){
//         if(level == VERBOSE){
//             Log.v(tag, msg);
//         }
//     }
//     public static void d(String tag,String msg){
//         if(level <= DEBUG){
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void i(String tag,String msg){
//         if(level <= INFO){
//             Log.i(tag, msg);
//         }
//     }
// 
// 
//     public static void w(String tag,String msg){
//         if(level <= WARN){
//             Log.w(tag, msg);
//         }
//     }
// 
//     public static void e(String tag,String msg){
//         if(level <= ERROR){
//             Log.e(tag, msg);
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/com/yoga/oneweather/util/MiscUtil.java
// public class MiscUtil {
//     /**
//      * 测量 view
//      * @param measureSpec
//      * @param defaultSize View的默认大小
//      * @return
//      */
//     public static int measure(int measureSpec ,int defaultSize){
//         int result = defaultSize;
//         int specMode = View.MeasureSpec.getMode(measureSpec);
//         int specSize = View.MeasureSpec.getSize(measureSpec);
//         if(specMode == View.MeasureSpec.EXACTLY){
//             result = specSize;
//         }else if(specMode == View.MeasureSpec.AT_MOST){
//             result = Math.min(result,specSize);
//         }
//         return result;
//     }
// 
//     /**
//      * dp 转 px
//      * @param context
//      * @param dip
//      * @return
//      */
//     public static int dipToPx(Context context, float dip){
//         float density  = context.getResources().getDisplayMetrics().density;
//         return (int) (dip * density + 0.5f * (dip >= 0 ? 1 : -1));
//     }
// 
// 
//     /**
//      * 获取数值精度格式化字符串
//      * @param precision
//      * @return
//      */
//     public static String getPrecisionFormat(int precision){
//         return "%."+precision+"f" ;
//     }
// 
// 
// 
//     /**
//      * 测量文字高度
//      */
//     public static float measureTextHeight(Paint paint){
//         Paint .FontMetrics fontMetrics = paint.getFontMetrics();
//         return (Math.abs(fontMetrics.ascent) + fontMetrics.descent);
//     }
// 
// 
// }


// Path: app/src/main/java/com/yoga/oneweather/widget/CircleProgress.java
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.graphics.SweepGradient;
import android.graphics.Typeface;
import android.support.v4.content.ContextCompat;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
import com.yoga.oneweather.BuildConfig;
import com.yoga.oneweather.R;
import com.yoga.oneweather.util.Constant;
import com.yoga.oneweather.util.LogUtil;
import com.yoga.oneweather.util.MiscUtil;

    private float mArcWidth;
    private float mStartAngle,mSweepAngle;
    private RectF mRectF;
    //渐变的角度是360度，如果只显示270度，会缺失一段颜色
    private SweepGradient mSweepGradient;
    private int[] mGradientColors = {Color.GREEN,Color.YELLOW,Color.RED};
    //当前进度
    private float mPercent;
    //动画时间
    private long mAnimTime;
    //属性动画
    private ValueAnimator mAnimator;

    //绘制背景圆弧
    private Paint mBgArcPaint;
    private int mBgArcColor;
    private float mBgArcWidth;

    //圆心坐标，半径
    private Point mCenterPoint;
    private float mRadius;
    private float mTextOffsetPercentInRadius;

    public CircleProgress(Context context, AttributeSet attrs){
        super(context,attrs);
        init(context,attrs);
    }

    private void init(Context context, AttributeSet attrs){
        mContext = context;
        mDefaultSize = MiscUtil.dipToPx(mContext, Constant.DEFAULT_SIZE);