Android draw circle with 2 colors (Pie chart)

后端 未结 2 1233
深忆病人
深忆病人 2020-12-09 13:40

This is my first question here at stackoverflow.com so excuse myself if i\'m doing stuff wrong.

I want to create a circle which basically is like a progress bar. No

2条回答
  •  青春惊慌失措
    2020-12-09 14:37

    This is only a hint. It is simply a view that draw two arcs in the same rect: First arc spans from angle 0 to 360. The second one (above the first) spans from 0 to an angle that depends on the percentage.

    public class PercentView extends View {
    
        public PercentView (Context context) {
            super(context);
            init();
        }
        public PercentView (Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
        public PercentView (Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }
        private void init() {
            paint = new Paint();
            paint.setColor(getContext().getResources().getColor(R.color.lightblue));
            paint.setAntiAlias(true);
            paint.setStyle(Paint.Style.FILL);
            bgpaint = new Paint();
            bgpaint.setColor(getContext().getResources().getColor(R.color.darkblue));
            bgpaint.setAntiAlias(true);
            bgpaint.setStyle(Paint.Style.FILL);
            rect = new RectF();
        }
        Paint paint;
        Paint bgpaint;
        RectF rect;
        float percentage = 0;
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            //draw background circle anyway
            int left = 0;
            int width = getWidth();
            int top = 0;
            rect.set(left, top, left+width, top + width); 
            canvas.drawArc(rect, -90, 360, true, bgpaint);
            if(percentage!=0) {
                canvas.drawArc(rect, -90, (360*percentage), true, paint);
            }
        }
        public void setPercentage(float percentage) {
            this.percentage = percentage / 100;
            invalidate();
        }
    }
    

    Add to your layout:

    
    

提交回复
热议问题