2013-11-01 136 views
4

这是我在stackoverflow.com上的第一个问题,所以请原谅我自己,如果我做错了东西。用2种颜色的Android绘制圆圈(饼图)

我想创建一个基本上像进度条的圆。现在我想通过一些代码设置百分比。

我想实现的是:https://raw.github.com/psud/Melde-App/master/res/drawable-hdpi/circlemiddle.png

我的问题:

  1. 无法获得具有两种颜色的圆圈工作(一直在寻找了几个小时的论坛,发现解决类似问题但我不能将这些解决方案实现到我的应用程序中,我已经阅读了很多有关canvas.drawArc(...)的内容,但似乎无法找到如何使用它)。
  2. 如何将画布放入布局? (我有一个xml布局,画布应该在特定的布局内绘制,而不会改变布局的其余部分)。

谢谢。

+2

可能重复[画出的Android饼图?](http://stackoverflow.com/questions/4397192/draw-pie-chart-in- android) – SERPRO

回答

18

这只是一个提示。它只是一个视图,它在同一矩形中绘制两个弧线:第一个弧线从角度0到360.第二个(在第一个之上)从0跨越到一个取决于百分比的角度。

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(); 
    } 
} 

添加到您的布局:

<bla.bla.PercentView 
      android:id="@+id/percentview" 
      android:layout_width="100dp" 
      android:layout_height="100dp" /> 
+1

真棒老兄!非常感谢!尽管对你的代码进行了一次更正:在“canvas.drawArc(rect,-90,(360 * percentage),true,paint);”360必须替换为3.6。 – patsud

+0

有一个小错误:当我开始活动时,只显示前景色并且背景保持透明。如果我然后进入一个不同的活动,然后再回来,饼图显示正确(现在背景也显示)。任何想法为什么发生这种情况? – patsud