Android 用倒计时圈出进度条

Android 用倒计时圈出进度条,android,progress-bar,countdowntimer,Android,Progress Bar,Countdowntimer,我有以下两个程序,可以工作,但需要将它们结合起来以实现我想要的。请参见下图 我有以下问题 进度条不顺畅 倒计时时间是不断上升和下降,而不是正确的倒计时 public class MainActivity extends ActionBarActivity { TextView tv2; ProgressBar pBar2; int pStatus = 0; private Handler handler = new Handler(); @Override protected void on

我有以下两个程序,可以工作,但需要将它们结合起来以实现我想要的。请参见下图

我有以下问题

  • 进度条不顺畅

  • 倒计时时间是不断上升和下降,而不是正确的倒计时

    public class MainActivity extends ActionBarActivity {
    
    TextView tv2;
    ProgressBar pBar2;
    int pStatus = 0;
    private Handler handler = new Handler();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        tv2 = (TextView) findViewById(R.id.textView2);
        pBar2 = (ProgressBar) findViewById(R.id.progressBar2);
    
        new Thread(new Runnable() {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
               while (pStatus < 100) {
                    pStatus += 1;
    
                    handler.post(new Runnable() {
    
                        @Override
                        public void run() {
    
                            new CountDownTimer(10000, 1000) {
                                @Override
                                public void onTick(long millisUntilFinished) {
                                    pBar2.setProgress(pStatus);
                                    tv2.setText("" + millisUntilFinished / 1000);
                                }
    
                                @Override
                                public void onFinish() {
                                    tv2.setText("Go!");
    
                                }
                            }.start();
                        }
                    });
                    try {
                        // Sleep for 200 milliseconds.
                        // Just to display the progress slowly
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
    
    公共类MainActivity扩展了ActionBarActivity{
    文本视图tv2;
    ProgressBar-pBar2;
    int pStatus=0;
    私有处理程序=新处理程序();
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv2=(TextView)findViewById(R.id.textView2);
    pBar2=(ProgressBar)findViewById(R.id.progressBar2);
    新线程(newrunnable()){
    @凌驾
    公开募捐{
    //TODO自动生成的方法存根
    而(pStatus<100){
    pStatus+=1;
    handler.post(新的Runnable(){
    @凌驾
    公开募捐{
    新的倒计时(10000,1000){
    @凌驾
    公共void onTick(长毫秒未完成){
    pBar2.setProgress(pStatus);
    tv2.setText(“+millisuntiltfinished/1000”);
    }
    @凌驾
    公共无效onFinish(){
    tv2.setText(“开始!”);
    }
    }.start();
    }
    });
    试一试{
    //睡眠200毫秒。
    //只是为了慢慢地显示进度
    睡眠(200);
    }捕捉(中断异常e){
    e、 printStackTrace();
    }
    }
    }
    }).start();
    }
    

  • 我曾经在开发足球应用程序时遇到过类似的问题,最终我编写了自己的视图,覆盖了绘图和画圈(圆弧),并编写了文本

    采用这种方法可以更容易地控制视图,而不是滥用ProgressBar来画圆圈,这甚至使视图更轻量级

    在右边你可以看到时钟和画游戏状态的圆圈

    因此,只需使用自定义视图,覆盖onDraw并操纵画布即可

    开始学习这一点的好方法是:

    检查这个。