2016-01-20 67 views
0

您好我想在如附加的图像的Android饼图进度条..饼图进度条的Android

enter image description here

我必须去通过下面的代码,但没有收获。 enter link description here

所以我决定写我自己的ProgressBarView。下面是我的示例代码..

public class PieProgressView extends View { 

private float mProgress; 

private int MAX_ANGLE = 360; 


public PieProgressView(Context context) { 
    super(context); 
} 

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

public PieProgressView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 



@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    drawOval(canvas); 

} 

public void setProgress(int progress){ 
    mProgress = (float) ((float)progress*3.6); 
    invalidate(); 
} 

private void drawOval(Canvas canvas){ 
    canvas.drawColor(Color.CYAN); 
    Paint paint = new Paint(); 
    // smooths 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.RED); 
    RectF oval2 = new RectF(50, 50, 500, 500); 
    canvas.drawOval(oval2, paint);// opacity 

    Paint p = new Paint(); 
    p.setColor(Color.BLACK); 
    canvas.drawArc(oval2, 270, mProgress, true, p); 
    System.out.println("drawOval Progress == "+mProgress); 


    //p.setAlpha(0x80); // 
} 

}

和活动课,从我把这个..

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button)findViewById(R.id.button); 
    pieProgressView = (PieProgressView)findViewById(R.id.pieprogress); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      fillProgress(); 
     } 
    }); 

} 

private void fillProgress(){ 
    for(int i=0;i<100 ; i++) { 

      pieProgressView.setProgress(i); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 

     } 
    } 
} 
在此

现在for循环没有显示出有进展,但完成后for循环它将显示进度条,如附加图像显示黑色进度。

谁能告诉我这段代码有什么问题。为什么这段代码没有进行持续更新?

+0

'setProgress()'是否正常工作,没有循环? –

+0

@LittleChild是的,它工作没有循环,但是当我运行循环,那么它只会在完成循环后才会更新。实际上,在我的应用程序中,我正在从服务器下载一些文件,并且我想以这种方式显示进度对话框。所以我使用循环不断更新视图。 –

回答

0

Thread.sleep()正在导致UI线程阻塞,因此您会在线程唤醒时看到“已填充”的饼图。我改变了代码使用CountDownTimer,而它的作用就像一个魅力。这里的代码:

public class MainActivity extends AppCompatActivity { 
    PieProgressView pie; 
    CountDownTimer timer; 
    int progress = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pie = (PieProgressView) findViewById(R.id.pie); 
     scheduleNextTimer(); 
    } 

    private CountDownTimer getTimer(){ 
     return new CountDownTimer(1000,1000) { 
      @Override 
      public void onTick(long millisUntilFinished) { 

      } 

      @Override 
      public void onFinish() { 
       Log.d("PROG",progress + ""); 
       pie.setProgress(progress++); 
       scheduleNextTimer(); 
      } 
     }; 
    } 

    private void scheduleNextTimer(){ 
     if(progress < 100){ 
      timer = getTimer(); 
      timer.start(); 
     } 
    } 
} 
+0

你的解决方案很好..这对我来说是一个寒冷的错误。非常感谢。 –

+0

@nitintyagi所有酷,伴侣:) –