正文
);//内圆的画笔颜色,默认
mRvRingView.setRingStrokeWidth(40);//圆环的环宽,默认20
// mRvRingView.showViewWithAnimation(1000);//自定义动画时长展示圆环
// mRvRingView.showViewWithoutAnimation();//展示圆环不带动画
mRvRingView.showViewWithAnimation();//动画展示圆环,默认2s
}
}
3.自定义view的源码
public class RingView extends View {
private static final int CIRCLE_ANGLE = 360;//圆环的角度
private static final int RING_STROKE_WIDTH = 20;//默认圆环的宽度为20dp
private Paint mNoAssetsPaint, mInnerCirclePaint;
private ArrayList<Paint> mPaints;
private int mRingStrokeWidth;//圆环的宽度
private int mCanvasWidth, mCanvasHeight;
private RectF mRingRect, mInnerRect;
private int mDensity;//手机屏幕密度
private int mNoDataPaintColor = Color.parseColor("#cccccc");//没有数据的paint的颜色
private int mInnerCirclePaintColor = Color.parseColor("#ffffff");//内圆的paint的颜色
private ArrayList<Integer> mAngles;//传入的数据
private boolean mHasData = false;
private ArrayList<Integer> mLevelStartAngles;//每段圆弧的起始角度值
private int mMoveAngle;//圆弧移动的角度
private int mRingStartAngle = -90;//圆环的起始角度
private RingAnimation mRingAnim;
public RingView(Context context) {
super(context);
init(context);
}
public RingView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public RingView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context ctx) {
mDensity = (int) ctx.getResources().getDisplayMetrics().density;
mRingStrokeWidth = RING_STROKE_WIDTH * mDensity;
mPaints = new ArrayList<Paint>();
mAngles = new ArrayList<Integer>();
mLevelStartAngles = new ArrayList<Integer>();
mNoAssetsPaint = new Paint();
mNoAssetsPaint.setAntiAlias(true);
mNoAssetsPaint.setStyle(Paint.Style.FILL);
mNoAssetsPaint.setColor(mNoDataPaintColor);
mInnerCirclePaint = new Paint();
mInnerCirclePaint.setAntiAlias(true);
mInnerCirclePaint.setStyle(Paint.Style.FILL);
mInnerCirclePaint.setColor(mInnerCirclePaintColor);
mRingAnim = new RingAnimation();
}
@Override
protected void onDraw(Canvas canvas) {
if (mCanvasWidth == 0) {
initRect();
}
if (!mHasData) {//没有数据
mMoveAngle = CIRCLE_ANGLE;
drawRingView(canvas, mRingStartAngle, mMoveAngle, mNoAssetsPaint);
} else {
int _level = 0;//圆弧的段数
for