【发布时间】:2016-01-20 06:39:42
【问题描述】:
您好,我想在 android 中制作一个 Pie 进度条,就像所附图片一样..
我已经通过以下代码但没有收获。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 循环完成后,它会显示进度条,就像附件中的黑色进度一样。
谁能告诉我这段代码有什么问题。为什么这段代码不做持续更新?
【问题讨论】:
-
setProgress( )在没有循环的情况下是否可以正常工作? -
@LittleChild 是的,它可以在没有循环的情况下工作,但是当我运行循环时,它只会在循环完成后更新。实际上,在我的应用程序中,我正在从服务器下载一些文件,并且我想以这种方式显示进度对话框。所以我使用for循环来不断更新视图。
标签: android view progress-bar